SpringCloud -- Ribbon负载均衡(负载均衡流程负载均衡原理(探究原码)负载均衡策略懒加载(饥饿加载))
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 小结
代码配置负载均衡策略的优先级高于配置文件方式,博主已踩坑!!!
以上是关于SpringCloud -- Ribbon负载均衡(负载均衡流程负载均衡原理(探究原码)负载均衡策略懒加载(饥饿加载))的主要内容,如果未能解决你的问题,请参考以下文章