程序员社区

SpringCloud构建微服务之Ribbon核心接口IRule

前言

在上篇文章我们整合了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,只需要返回不同规则的对象即可。

配置完后,重复消费者服务,访问接口,即可看到效果,此处就不再演示效果了。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » SpringCloud构建微服务之Ribbon核心接口IRule

一个分享Java & Python知识的社区