ribbon 源码解析
2021-10-10 16:47:42 6 举报
ribbon 源码解析
作者其他创作
大纲/内容
rule.choose(key)
ILoadBalancer
DynamicServerListLoadBalancer
用 RestTemlateCustomizer 定制所有的 restTemplate
updateAllServerList
restTemplate.getForObject(\"http://microservice-provider-order/\
DiscoveryEnabledNIWSServerList
PollingServerListUpdater
构造方法
@LoadBalaced
获取负载均衡器
RibbonAutoConfiguration
@AutoConfigureBefore
作为参数传入@Bean
1、获取负载均衡器 loadBalancer
作为 Bean 的初始化参数
enableAndInitLearnNewServersFeature()
@Bean
SmartInitializingSingleton
ribbon 定时跟新 eureka 实例列表
初始化父类
default 就是默认轮询法,底层即就是从 0 开始,每次加 1 然后对实例列表取模得到实例的数组下标值
从 Spring 容器中获取 ILoadBalancer,这里说明已经有地方将其实例化存放到 spring 容器中了
implements
初始化
super.setServersList(lsrv)
返回对应的服务实例
扫描同包下的XXAutoConfiguration
LoadBalancerInterceptor
2、根据第一步拿到的负载均衡器 loadBalancer获取一个 server
有一个被 @LoadBalanced 注解的 restTemplates(装了所有被 @LoadBalanced 注解的 restTemplate)
BaseLoadBalancer.chooseServer(key)
serverListUpdater.start(updateAction)
loadBalancer.chooseServer(\"default\")
initWithConfig
setPingInterval
RibbonClientConfiguration
servers = serverListImpl.getUpdatedListOfServers()
EurekaRibbonClientConfiguration
RestTemplate
设置 Server 的定时 Ping 任务
ServerList<erver> serverListeureka 服务实例列表
LoadBalancerClent.execute
PredicateBasedRule.choose
将服务实例列表设置到父类的 BaseLoadBalnacer 的 allServerList
AnnotationConfigApplicationContext..getBean()
作为初始化 @Bean 参数
setServersList(list)
被拦截
默认ZoneAvoidanceRule
LoadBalancerInterceptor.intercept
RestTemplateCustomizer
作为 @Bean 初始化参数
从 eurekaClient 中获取本地实例缓存
LoadBalancerClient.execute
定制 RestTemplate,将LoadBalancerIntercepor 封装到 RestTemplate 的拦截器集合里
IPing
ILoadBalancer loadBalancer = getLoadBalancer(serviceId)
LoadBalancerClient
BaseLoadBalancer
getUpdatedListOfServers()
ZoneAwareLoadBalancer
restOfInit(IClientConfig clientConfig)
allServerList 就是 ribbon从 eureka 获取的 server 列表
clientFactory.getLoadBalancer(serviceId)
获取所有 eureka 实例列表
DomainExtractingServerList
实例化 ZoneAwareLoadBalancer,并将其交给 spring 管理
LoadBalancerAutoConfiguration
updateListOfServers()
定时从 eureka 服务端获取最新服务实例列表
配置文件 > java 配置
RibbonLoadBalancerClient
IRule
作为 @Bean 的初始化参数
0 条评论
下一页