SpringCloud入坑记-Ribbon进阶

前言
在初步了解了Ribbon之后Ribbon初体验,还需要进一步探究Ribbon高级特性。

Ribbon的负载均衡

现成的负载均衡策略

Ribbon提供了许多负载均衡策略,其中一部分列举如下:

简称说明
RandomRule随机随机地选择服务
RoundRobinRule轮询依次循环选择服务
RetryRule重试选择服务失败以后尝试选择其他服务
BestAvaiableRule最低并发选择连接数最少的服务
AvailabilityFilteringRule可用过滤过滤掉被标记的服务
ResponseTimeWeightedRule响应时间加权响应时间越长,权重越低,选择的概率越低
ZoneAvoidanceRule区域权衡在一个区域中轮询选择

Ribbon
Ribbon实现了这么多的负载均衡策略,在项目中如何应用上呢?

配置负载均衡策略

复制项目ms-c1-order-ribbon,命名为ms-d1-order-ribbon.

在配置类CustomConfig中添加如下代码:

   @Bean
    public IRule ribbonRule(){
        return new RandomRule();
    }

简单的配置,就完成了负载均衡策略的切换,之后所有通过Ribbon调用的请求都会使用该策略(随机).

要是想使用其他的策略,修改为对应的实现类:

    @Bean
    public IRule ribbonRule(){
        return new WeightedResponseTimeRule();
    }

这种配置是全局生效的,一旦配置以后,所有的调用都是基于该策略。有时候,我们并不想这样做,就可以通过下面这种方式。

@Configuration
public class MyRibbonConfig {

    @Autowired
    IClientConfig config;

    @Bean
    public IRule ribbonRule(IClientConfig config){
        return new RandomRule();
    }
}

需要注意的是该类不应该在主应用程序上下文的@ComponentScan中

不仅可以通过配置类来配置,还可以在配置文件中声明:

order-a:
    ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

这样就使得服务order-a通过随机策略来请求。

问题集锦

第一次请求失败

如果机器的性能不算太好,某些时候,可能出现第一次调用超时不成功,但是问题无法很好地重现,这时可以参考下面这种解决方案。

ribbon:
    eager-load:
        enable: true
        clients: order-a, order-c

Ribbon不是在启动时就加载完负载均衡策略,而是在实际请求时才真实创建。于是可以通过开启饥饿加载的方式来回避。
当然第一次请求失败的原因很多,这只是其中一种思路,之后在接触其他组件的时候,也可能遇到类似问题。

未完待续

负载均衡的实现很简单,思想更重要,下一节将接触新的组件Feign,可以说它是对Ribbon的封装。

项目代码托管于Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cj96248

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值