ribbon(feign)负载策略zuul路由规则自定义思路分析
zull隔离策略
ribbon-isolation-strategy: thread----独立线程,不可共享上下文
ribbon-isolation-strategy: -----可以共享上下文信息
ribbon:
负载均衡策略自定义的覆盖配置
负载均衡的两种配置方法(通过属性的配置方式):
一种直接调用ConfigurationManager获取配置实例,然后设置配置属性;一种是在application.yml中配置。
一般一个lb加载器传入现有服务列表,负载策略即可实现自定义的负载
负载均衡实现的思路:
实现iurle接口
里面定义什么符合什么条件就以负载服务列表为基础选择这个条件对应的机器
feign:
feign其实不是做负载均衡的,负载均衡是ribbon的功能,feign只是集成了ribbon而已,但是负载均衡的功能还是feign内置的ribbon再做,而不是feign。
feign的作用的替代RestTemplate,性能比较低,但是可以使代码可读性很强。
feign的负载策略是ribbon,只要修改ribbon的负载策略即可改变feign负载,feign会自动寻找到容器中的ribbon注入
可以通过java的方式,或者配置文件的方式设定要注入的ribbonrule(可自定义)
feign的隔离策略
# 在feign和Ribbon里面配置隔离策略(全局配置)
#hystrix.command.default.execution.isolation.strategy=SEMAPHORE
# 配置单个 ystrixCommandKey在Ribbon下面默认为方法名,在feign下面默认为类名#方法名(参数类型)
#hystrix.command.HystrixCommandKey.execution.isolation.strategy=SEMAPHORE
这些配置项的前缀是【客户端名称】.ribbon
The supported properties are listed below and should be prefixed by <clientName>.ribbon.:
NFLoadBalancerClassName: should implement ILoadBalancer
NFLoadBalancerRuleClassName: should implement IRule
NFLoadBalancerPingClassName: should implement IPing
NIWSServerListClassName: should implement ServerList
NIWSServerListFilterClassName should implement ServerListFilter
其中比较重要的是NFLoadBalancerRuleClassName,我们可以通过这个配置项定制需要的负载均衡规则,可以是ribbon提供的原生的几种规则类,也可以是自己实现的规则类,这些类都实现了IRule接口。
NFLoadBalancerPingClassName用于配置查看服务器是否存活。
NFLoadBalancerRuleClassName指定负载均衡器的实现类。当然,可以设置自己实现的负载均衡器。
NIWSServerListClassName是服务器列表的处理类,用来维护服务器列表的。Ribbon已经实现了动态服务器列表。
NIWSServerListFilterClassName是服务器的拦截类。
zuul负载策略--
自定义路由:
1,网关可以跳转到zuul
ZuulController 对/根路劲过滤 经过一系列过滤器
2,zuul获取所有过滤器和自定义路由
过滤器部分--自定义过滤器纳入spring:
@Component =@Configuration + @Bean 将过滤器纳入spring
ZuulFilterConfiguration 获取所有的纳入spring过滤器
ZuulFilterInitializer 获取所有的过滤器保存在filterRegistry中
自定义路由部分:
ZuulProxyAutoConfiguration 按照实现类的接口自动注入该自定义的路由规则
PreDecorationFilter
@Configuration +@Bean(value = "discoveryRouteLocator") =里面就是自定义的路由规则
CustomRouteLocator:
@Configuration
publicclass AppConfig{ //.....省略....(value = "discoveryRouteLocator") public DiscoveryClientRouteLocator discoveryClientRouteLocator(ServerProperties server, DiscoveryClient discovery, ZuulProperties properties,ServiceInstance localInstance) { returnnew CustomRouteLocator(server.getServletPath(), discovery,properties,localInstance); } }
3,zuul过滤器执行过程:
zuulfiter的过滤器类型是在过滤器中设置的
type: pre,routing,post
过滤器的获取方式是通过类型查找---享元模式
获取到过滤器之后循环遍历,传入过滤器一个一个执行
pre类型的PreDecorationFilter过滤器,用来进行路由规则的匹配,
根据请求的url选择路由,选择之后:
/xxx/service_name是通过RibbonRoutingFilter实现对服务的负载均衡访问
http://www.abc.com/xxx/service_name这种,则是通过SendForwardFilter过滤器实现转发访问
参考:
https://www.cnblogs.com/cxxjohnson/p/9027919.html
https://blog.csdn.net/chuxue1989/article/details/80787730
https://www.cnblogs.com/liangzs/p/8946740.html
相关推荐
Spring Cloud Gray - ...spring-cloud-gray-client-netflix在spring-cloud-gray-client的基础上集成了微服务注册中心eureka,扩展ribbon的负载均衡规则,提供了对zuul,feign,RestTemplate的灰度路由能力,并且无缝支持
压缩包中的"ribbon负载均衡说明.txt"文件可能详细介绍了Ribbon的工作原理和使用方法,包括如何配置负载策略、如何在服务调用中集成Ribbon等。而"spring-cloud"文件夹则可能包含了整个Spring Cloud项目的源代码,包含...
以上内容详细介绍了Spring Boot 整合 Spring Cloud 的核心概念和技术实现细节,包括服务治理、服务发现与消费、Feign 模式的使用、熔断器Hystrix以及路由网关Zuul等多个方面,为开发人员提供了全面的指导。
- **Ribbon**:客户端负载均衡器,通过轮询、随机或自定义负载均衡策略选择服务实例。 - **Feign**:声明式HTTP客户端,简化HTTP请求的编写工作。 - **Hystrix**:断路器,隔离服务间依赖故障,防止级联失败。 -...
1. 自定义负载均衡策略:通过扩展Ribbon的规则,根据标签决定请求路由。 2. 请求监听:使用`ServletRequestListener`监听请求,从请求头获取标签信息并存储在线程上下文中。 3. 线程上下文传递:利用`...
- SpringCloud的Zuul或Ribbon可以实现智能路由,根据预定义的规则将请求转发到不同的服务实例,实现灰度发布、A/B测试等高级功能。 8. **服务跟踪**: - SpringCloud Sleuth与Zipkin集成,可以实现服务间的请求...
- **Apollo**:百度开源的配置中心,支持灰度发布等多种高级特性。 - **服务主线**: - **Spring Cloud Bus**:用于在集群中传播事件,例如服务配置变更通知。 - **Nacos**:如前所述,除了服务发现与配置管理外...
当配合Nacos使用时,Nacos提供了更丰富的配置管理功能,包括配置的版本控制、灰度发布等。 - **Spring Cloud Ribbon** 和 **Feign**:两者都是客户端负载均衡器,Ribbon是基于HTTP和TCP的客户端负载均衡工具,而...
• 支持Spring Cloud Gateway、Zuul网关和微服务三大模块的灰度发布和路由等一系列功能 兼容的Spring相关技术栈 • 兼容Spring Cloud Edgware版,兼容Spring Cloud Alibaba 1.5.x.RELEASE,兼容Spring Boot 1.5.x....
调用方法:传递服务名称通过注册中心获取所有的可用实例,通过负载均衡策略调用(Ribbon 和 Feign)对应的服务。 5. 什么是服务熔断和服务降级? 熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不...
7. **智能路由**:Spring Cloud Netflix Zuul 可以根据条件动态路由请求,实现灰度发布、A/B 测试等功能。 8. **服务跟踪**:Spring Cloud Sleuth 结合 Zipkin 或 ELK(Elasticsearch, Logstash, Kibana)等工具,...
12. **灰度发布/金丝雀测试**:Spring Cloud Gateway 或 Istio 可能会被用作实现灰度发布和金丝雀测试的工具,这将帮助你理解如何在生产环境中逐步部署新版本。 13. **服务健康检查**:Spring Boot Actuator 提供了...
1. 微服务1.0架构:采用Spring Cloud组件,包括Eureka作为服务注册与发现,Ribbon和Hystrix负责客户端负载均衡和熔断,Feign用于服务间的通信。此外,结合Docker容器化技术,利用Kubernetes进行服务编排,实现高效的...
4. **负载均衡与熔断机制**:学习Ribbon和Feign,了解它们在客户端负载均衡中的作用;同时,掌握Hystrix提供的断路器模式,用于防止服务雪崩。 5. **配置管理**:理解Spring Cloud Config Server和Client的配置,...