Ribbon负载均衡
2021-07-06 15:53:22 0 举报
Ribbon负载均衡源码解析
作者其他创作
大纲/内容
作为参数@Bean传入
DynamicServerListLoadBalancer
serverListImpl.getUpdatedListOfServers()
updateListOfServers
refresh()
@LoadBalanced
enableAndInitLearnNewServersFeature
super.chooseServer(key)
初始化父类
定时更新Nacos服务列表
(eligible.get(incrementAndGetModulo(eligible.size()))
restOfInit(clientConfig)
作为参数注入@Bean
RestTemplateCustomizer
服务发现
自动装配处理的时候会发现在RestTemplate里面加入了Interceptor
LoadBalancerAutoConfiguration
setPingInterval
getEligibleServers获取所有可用的server
serverListUpdater.start(updateAction)
1 IClientConfig 设置默认的配置 默认 l连接 读取 超时时间 1s 2 IRule 设置 负载策略3 IPing4 ILoadBalancer
从这里拿IRule
初始化 ZoneAvoidanceRule继承了PredicateBasedRule
定制RestTemplate(将LoadBalancerIntegrceptor封装到RestTemplate的拦截器集合面)
初始化Bean
默认 ZoneAwareLoadBalancer
initWithConfig
RibbonLoadBalancerClient(这是LoadBalancerInterceptor的一个属性)包含属性SpringClientFactory
hostReactor.getServiceInfo
intercept方法
updateAction.doUpdate()
猜想到是否是用拦截器替换Host
LoadBalancerInterceptor
getLoadBalancer(serviceId)
设置定时任务
参数说明 1 LoadBalancerClient loadBalancer 负载均衡客户端2 serviceName = originalUri.getHost() 用户服务memberService
chooseServer(\"default\")
beanFactory.preInstantiateSingletons()
rule.choose(key)
获取负载均衡器
ILoadBalancer
updateAllServerList
执行时机
PollingServerListUpdater
SmartInitializingSingleton
setServersList(List lsrv)
finishBeanFactoryInitialization(beanFactory)
restTemplate.setInterceptors(list)
this.loadBalancer.execute(font color=\"#f44336\
chooseRoundRobinAfterFiltering
getServers()
SpringClientFactory包含RibbonClientConfiguration
BaseLoadBalancer
NacosServerList
轮询
用定制器循环定制RestRTemplate集合
实现了接口
收藏
0 条评论
下一页