Ribbon
2020-04-25 13:43:04 0 举报
Ribbon流程
作者其他创作
大纲/内容
ZoneAwareLoadBalancer#chooseServer选择server并调用父类方法
LoadBalancerInterceptor 1.为restTemplate添加拦截器
DynamicServerListLoadBalancer#enableAndInitLearnNewServersFeature1.启动自动更新serverList的线程
Runnable线程(30s执行一次)
RibbonLoadBalancerClient#getServer
1.初始化IPing:NIWSDiscoveryPing2.初始ribbonServerList:DiscoveryEnabledNIWSServerList
DynamicServerListLoadBalancer#updateAllServerList
BaseLoadBalancer#chooseServer
DynamicServerListLoadBalancer#updateListOfServers更新服务信息
Ribbon
DynamicServerListLoadBalancer#restOfInit调用构造方法中的restOfInit方法
返回server列表然后调用updateAllServerList方法
NamedContextFactory#getContext获取容器的上下文contexts中包含则返回负责新建一个容器
LoadBalancerInterceptor#intercept1.拦截器方法,restTemplate执行getforObgect方法时候最后会调用此拦截器
spring.factories
NamedContextFactory#getInstance1.新建此容器的上下文,然后getBean获取类的实例化
AutoConfigureBefore
RibbonLoadBalancerClient#getLoadBalancer1.获取此类的信息,委托给Factory处理
SpringClientFactory#getLoadBalancer1.调用方法,然后调用其父类的getInstance方法
@ConditionalOnClass(RestTemplate.class)@ConditionalOnBean(LoadBalancerClient.class)LoadBalancerAutoConfiguration
@AutoConfigureAfter(RibbonAutoConfiguration.class)@RibbonClients(defaultConfiguration = EurekaRibbonClientConfiguration.class)RibbonEurekaAutoConfiguration
初始化ZoneAwareLoadBalancer调用父类构造方法
1.初始化SmartInitializingSingleton:SmartInitializingSingleton2.初始化LoadBalancerRequestFactory:LoadBalancerRequestFactory3.初始化LoadBalancerInterceptor:LoadBalancerInterceptor4.初始化RestTemplateCustomizer:RestTemplateCustomizer
NamedContextFactory#createContext新建上下文,并且将RibbonClientConfiguration放进去,最后调用context的refresh方法刷新容器
RibbonLoadBalancerClient#execute1.拦截器会调用此实现类的execute方法
DiscoveryEnabledNIWSServerList#getUpdatedListOfServers
DynamicServerListLoadBalancer#setServersList1.调用父类的serServerList方法2.将server分到不同的zone内
ServerListUpdater.UpdateAction#doUpdate
BaseLoadBalancer.setServersList将server列表赋值
SpringClientFactory#super注入RibbonClientConfiguration类
1.初始化SpringClientFactory:SpringClientFactory2.初始化LoadBalancerClient:RibbonLoadBalancerClient3.初始化PropertiesFactory:PropertiesFactory4.初始化serverIntrospector:DefaultServerIntrospector
DiscoveryEnabledNIWSServerList#obtainServersViaDiscovery1.通过eurekaClientProvider获取对应EurekaClient2.通过vipAdress(实际就是serviceName)获取对应注册表集合信息3.将注册信息组装成DiscoveryEnabledServer列表
@Configuration(proxyBeanMethods = false)EurekaRibbonClientConfiguration
AnnotationConfigApplicationContext#refresh初始化容器
1.初始化ribbonRule: ZoneAvoidanceRule2.初始化ribbonPing:DummyPing3.初始化ribbonServerList:ConfigurationBasedServerList4.初始化ServerListUpdater:PollingServerListUpdater5.初始化ILoadBalancer:ZoneAwareLoadBalancer6.初始化ribbonServerListFilter:ZonePreferenceServerListFilter7.初始化ribbonLoadBalancerContext:RibbonLoadBalancerContext8.初始化serverIntrospector:DefaultServerIntrospector
0 条评论
下一页