Ribbon 负载均衡策略配置
这个负载策略配置说白了就是让 Ribbon 这个客户端负载均衡器怎么进行访问服务提供者列表。是轮流访问?随机访问?权重?等。
Ribbon 的负载均衡策略
-
默认为轮询策略
全局策略设置
增加 Ribbon 负载均衡策略配置类
/** * @Author:大漠知秋 * @Description:Ribbon 全局的负载均衡策略配置类 * @CreateDate:6:32 PM 2018/10/25 */ @Configuration public class RibbonGlobalLoadBalancingConfiguration { /** * 随机规则 */ @Bean public IRule ribbonRule() { return new RandomRule(); } }
基于注解的针对单个服务的 Ribbon 负载均衡策略
这里把上一步的的全局配置给删掉。
注解方式
增加一个针对单个服务的 Ribbon 负载聚恒策略配置类:
/** * @Author:大漠知秋 * @Description:Ribbon 随机负载均衡策略配置类 * 那个服务引用就作用在那个服务上面 * 在启动类上方使用 @RibbonClient 引用 * @CreateDate:7:04 PM 2018/10/25 */ @Configuration /** 用来标记使用的注解,方便排除或者引用 **/ @AvoidScan public class RibbonRandomLoadBalancingConfiguration { @Resource IClientConfig clientConfig; @Bean public IRule ribbonRule(IClientConfig clientConfig) { return new RandomRule(); } }
-
**IClientConfig:**针对客户端的配置管理器。
在主启动类上方做针对单个服务的负载均衡策略:
/** 配置针对单个服务的 Ribbon 负载均衡策略 **/ @RibbonClient( name = "demo-goods", configuration = RibbonRandomLoadBalancingConfiguration.class ) /** 此处配置根据标识 @AvoidScan 过滤掉需要单独配置的 Ribbon 负载均衡策略,不然就会作用于全局,启动就会报错 */ @ComponentScan( excludeFilters = @ComponentScan.Filter( type = FilterType.ANNOTATION, value = AvoidScan.class ) )
配置文件方式
我个人也不太喜欢上方的那种注解方式针对单个服务的负载均衡策略,下面是配置文件的方式:
-
.ribbon.*
### 针对单个服务的 Ribbon 配置 demo-goods: ribbon: # 基于配置文件形式的 针对单个服务的 Ribbon 负载均衡策略 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
结果:
源码: