前言
在上篇文章我们整合了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,只需要返回不同规则的对象即可。
配置完后,重复消费者服务,访问接口,即可看到效果,此处就不再演示效果了。
本文详细介绍了Ribbon中用于实现负载均衡的各种策略,包括轮询、随机、权重响应时间等,并展示了如何通过配置切换不同的负载均衡规则。

4132

被折叠的 条评论
为什么被折叠?



