SpringCloud从0到1(3)--Ribbon内部原理

Ribbon是负责负载均衡的,我们只知道在注入RestTemplate时在其上面加入了@LoadBalanced注解,就可以实现负载均衡,那么具体是怎么实现的呢?

首先 微服务客户端会通过要访问的服务名称发起访问请求,Ribbon会通过LoadBalancerInterceptor拦截器拦截住这个请求,然后执行其中的intercept方法,在这个方法中执行一个名叫getHost()的方法,得到host也就是我们所写的微服务的名称。然后执行execute()方法,通过servicedId访问Eureka拿到服务列表,返回类是DynamicServerListLoadBalancer,存放着服务名称对应的ip+端口列表。

在下一步就是通过通过调用getServer()方法,选择负载均衡,期间会有一个选择方法 chooseServe(),选择负载均衡的规则,而负载均衡的规则是有IRule接口制定的,他有7个实现类,也就是有7种负载均衡规则,默认使用的是轮询,还有随机、权重、可用服务的最小并发等负载均衡算法。

想要改变Ribbon的负载均衡策略也很简单 一共有两种

第一种 ,全局改变,也就是访问所有的微服务都会被指定使用同一种负载均衡策略。

就是在配置类中加入以下代码

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

这段代码代表访问所有的微服务全都是用随机策略。

第二种是指定访问某个微服务时使用某一种负载均衡策略,而且好处是这种是可以写在配置文件中

在application.yml配置文件中加入

微服务名: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

这种代表访问某个微服务时,使用随机的策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值