Ribbon_2.3_源码解析
2022-04-06 01:43:35 7 举报
Ribbon_2.3_源码解析
作者其他创作
大纲/内容
PollingServerListUpdater
负载均衡器默认是ZoneAwareLoadBalancer
ILoadBalancer.chooseServer()
updateAllServerList(servers)
IPing
被拦截
LoadBalancerInterceptor
LoadBalancerClient.execute()
对容器中所有用@LoadBalanced标注的RestTemplate进行定制
serverListUpdater.start(updateAction);
updateListOfServers();
实例已经获取到了,开始进行操作
ILoadBalancer loadBalancer = getLoadBalancer(serviceId)
BaseLoadBalancer
nacos实例池:ServerList<T> serverListImpl
通过NamingService获取实例
根据负载均衡算法获取Server
配置文件 > Java配置
作为初始化@Bean参数
ZoneAwareLoadBalancer
@Bean的初始化
ZoneAvoidanceRule
enableAndInitLearnNewServersFeature()
@LoadBalanced
if (!ENABLED.get() || getLoadBalancerStats().getAvailableZones().size() <= 1)
ILoadBalancer
默认
将服务实例列表设置到父类的Baseload Balanceregallserverlist
1、获取负载均衡器器
ClientHttpResponse
LoadBalancerInterceptor.intercept()
RestTemplate定制过程
使用Ribbon调接口
DynamicServerListLoadBalancer
做为初始化参数
initWithConfig()
2、根据负载均算法挑选一个server
初始化父类
设置 Servere的定时Ping任务
LoadBalancerAutoConfiguration
rule.choose(key)
serverListImpl.getUpdatedListOfServers()
RestTemplateCustomizer
将服务实例列表设置到父类的BaseloadBalancereg属性allserverlist中
SmartInitializingSingleton
在同包目录下去找 Confiquration
setPingInterval(pingIntervalTime)
提示:微服务各个实例的获取是在ILoadBalancer的初始化中完成的
RibbonLoadBalancerClient.execute()
restOfInit(clientConfig)
获取所有nacoss实例列表
作为Bean的初始化参数
IRule
Ribbon定时更新nacos实例列表
setServersList(ls)
super.chooseServer(key)
默认负载均衡算法是ZoneAvoidanceRule
在 DynamicServerListLoadBalancer构造器中执行
clientFactory.getLoadBalancer(serviceId)
用RestTemplateCustomizer定制所有的 RestTemplate
BaseLoadBalancer.chooseServer()
一般要找某个类初始化的地方,可以在使用该类对象的类的同级目录找相关的 Configuration类里找
RibbonClientConfiguration
调用接口,获取其结果
国内服务都没有设置zone,所以会进入其中
0 条评论
下一页