前言
在上篇文章我们整合了Ribbon
组件实现了客户端的负载均衡,本次将来讲解一下Ribbon
实现负载均衡的一个核心接口(IRule
)。
Ribbon规则
Ribbon中具体实现负载均衡的策略是通过IRule这个接口来实现的,结构图如下:
Ribbon自带规则
规则名称 | 规则描述 |
---|---|
RoundRobinRule | 轮询 |
RandomRule | 随机 |
AvailabilityFilteringRule | 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问 |
WeightedResponseTimeRule | 根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule |
RetryRule | 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务 |
BestAvailableRule | 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务 |
ZoneAvoidanceRule | 默认规则,复合判断server所在区域的性能和server的可用性选择服务器 |
切换Ribbon规则
下面来演示一下如何切换不使用ribbon默认规则,使用其它规则。
新建一个配置类,可参考前面所建的RestTemplateConfig
完整代码如下:
@Configuration
public class RibbonRuleConfig {
// 指定ribbon负载均衡规则
@Bean
public IRule ribbonRule(){
return new RetryRule(); // 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
}
}
是不是感觉很easy!对,就是这么easy,只需要返回不同规则的对象即可。
配置完后,重复消费者服务,访问接口,即可看到效果,此处就不再演示效果了。