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(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3.2.2 配置文件方式(某个微服务)
# 这个是微服务的iduser-service: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 随机策略
- 1
- 2
- 3
- 4
4 .懒加载(饥饿加载)
4.1 现象复现
4.2 开启懒加载
# 配置懒加载ribbon: eager-load: enabled: true # 开启懒加载 clients: user-service # 指定饥饿加载的服务名称
- 1
- 2
- 3
- 4
- 5
提示:指定多个服务可以这样写
# 配置懒加载ribbon: eager-load: enabled: true # 开启懒加载 clients: - user-service - order-service - ......
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
5. 小结
代码配置负载均衡策略的优先级高于配置文件方式,博主已踩坑!!!