Spring Cloud Ribbon源码分析(二) 列表更新

在这里插入图片描述
上节回顾:
通过Ribbon集成之后,RestTemplate做了什么事情?RestTemplate本身是一个HTTP客户端,让我们更加简化的完成HTTP请求,但是因为集成Ribbon后需要对请求实现负载均衡,所以在RestTemplate真正发起HTTP请求之前做了一个拦截,这个拦截就是LoadBalancerInterceptor完成的,它的最终实现是RibbonLoadBlancerClient去进行拦截和处理,在拦截过程中分析了几个阶段,第一个阶段是初始化阶段,怎么对加了LoadBalancer的注解RestTemplate进行拦截,通过讲解了自动装配过程,讲到LoadBalancerAutoConfiguration自动装配类,这个装配类里边是嵌套的Bean的依赖,下图的顺序就是bean的初始化的过程。通过这个一个过程对RestTemplate加了一个拦截,就可以使用负载均衡处理。
在这里插入图片描述
在这里插入图片描述
负载均衡规则:
RoundRobbinRule:默认的轮询规则
WeightedResponseTimeRule:通过服务平均的响应时间,给每一个服务一个权重,响应时间越长,权重越小,开始统计信息不足,应用轮序策略。
RandonRule:随机获取一个服务
RetryRule:先按照轮询策略获取服务如果获取服务失败则在指定时间内会重试,获取可用的服务。
在这里插入图片描述
allServerList和upServerList,服务器端提供地址列表在客户端内存中的缓存
在这里插入图片描述

调用规则
1,我们构建ZoneAwareLoadBalancer的其父类方法DynamicServerListLoadBalancer中的构造方法会执行,会调用this.restOfInit(clientConfig);
2,restOfInit中有两个重要的方法,enableAndInitLearnNewServersFeatureupdateListOfServers
3,enableAndInitLearnNewServersFeature调用,总体思想是用定时器scheduled通过updateListOfServers()来更新Eurake实例列表,enableAndInitLearnNewServersFeature中this.serverListUpdater.start(this.updateAction)默认每30s执行一次更新本地服务器列表,run中定时器,updateAction中调用了updateListOfServers方法。serverListUpdater.start是在RibbonClientConfiguration中初始化的。
4,updateListOfServers调用serverListImpl.getUpdatedListOfServers()来更新服务器列表,getUpdatedListOfServers可以有多个实现,可以从本地配置文件获取,也可以从Eurake列表获取;
5,updateListOfServers中调用updateAllServerList,updateAllServerList调用setServersList,setServersList调用父类BaseLoadBalancersetServersList方法,更新BaseLoadBalancer中allserverList和upserverList列表
6,ping确认存活策略,DynamicServerListLoadBalancer的父类BaseLoadBalancer的构造方法中会设置this.initWithConfig();,this.initWithConfig会调用this.setPingInterval(pingIntervalTime)不断去检查,将无法连接的节点去除掉。定时器也是通过scheduled。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值