SpringCloud -- Ribbon负载均衡(负载均衡流程、负载均衡原理(探究原码)、负载均衡策略、懒加载(饥饿加载))

1. Ribbon负载均衡流程

在这里插入图片描述


2. 负载均衡原理(探究原码)


2.1 原理探究

示例代码源于上节案例
在这里插入图片描述

那么这个拦截的动作是谁去完成的呢?

由LoadBalancerInterceptor类完成。
在这里插入图片描述

它实现了ClientHttpRequestInterceptor接口,该接口的功能就是拦截客户端 HTTP 请求。而RestTemplate就是一个发Http请求的客户端,所以RestTemplate发起的请求自然而然的就被拦截了。
在这里插入图片描述

在这里插入图片描述
我们回到他的实现类LoadBalancerInterceptor,并在该方法打一个断点,然后debug运行服务端。
在这里插入图片描述

这时候我们发起一个请求,就发现进入了debug里面(这就证明这个请求确实被拦截了)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们继续跟进这个方法:
在这里插入图片描述

我们可以看见负载均衡器loadBalancer已经拿到了服务列表:
在这里插入图片描述

那么接下来就是返回服务列表了。
在这里插入图片描述
在这里插入图片描述

我们跟进getServer方法看它内部是怎么实现的,我们发现里面有一个选择服务来进行负载均衡的接口IRule,有许多类实现了这个接口,也就是说定义了许多选择服务的规则:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拿到了以后接下来就可以向拿到的服务去发送请求等等…


2.2 小结

在这里插入图片描述


3. 负载均衡策略


3.1 介绍负载均衡策略

这里主要介绍IRule接口的实现类里面定义的选择服务的规则(做负载均衡)。

在这里插入图片描述

在这里插入图片描述


3.2 修改负载均衡策略

在这里插入图片描述


3.2.1 代码方式(全局 优先级高于配置文件方式

在这里插入图片描述

    @Bean
    /*
     * 把全局设置为随机的负载均衡策略
     */
    public IRule randomRule() {
        return new RandomRule();
    }

3.2.2 配置文件方式(某个微服务)

在这里插入图片描述

# 这个是微服务的id
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 随机策略

4 .懒加载(饥饿加载)

在这里插入图片描述


4.1 现象复现

在这里插入图片描述在这里插入图片描述


4.2 开启懒加载

在这里插入图片描述

# 配置懒加载
ribbon:
  eager-load:
    enabled: true # 开启懒加载
    clients: user-service # 指定饥饿加载的服务名称

提示:yaml语法指定多个服务可以这样写

# 配置懒加载
ribbon:
  eager-load:
    enabled: true # 开启懒加载
    clients: 
      - user-service
      - order-service
      - ......

5. 小结

在这里插入图片描述
代码配置负载均衡策略的优先级高于配置文件方式,博主已踩坑!!!



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeJiao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值