大家好我是苏麟 今天带来Ribbon负载均衡 .

LoadBalancerInterceptor ,这个类会在对RestTemplate的请求进行拦截,然后从Eureka根据服务id 获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。

可以看到这里的intercept方法,拦截了用户的HttpRequest请求,然后做了几件事:
这里的 this.loadBalancer 是 LoadBalancerClient 类型,我们继续跟入。

代码是这样的:
放行后,再次访问并跟踪,发现获取的是8081



总结

基本流程如下:


通过定义IRule实现可以修改负载均衡规则,有两种方式:
1. 代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:
-
- /**
- * 通过定义IRue实现可以修改负载均衡规则,有两种方法
- * 1.在启动类中定义一个新的IRue 这种是全局的
- *
- */
- @Bean
- public IRule randomRule() {
- return new RandomRule();
- }
2. 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
-
- userservice:
- ribbon:
- NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。 而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
- ribbon:
- eager-load:
- enabled: true
- clients: userservice
这期就到这里下期见!
拜拜!