ribbon 调用流程
2021-04-12 20:18:46 0 举报
ribbon源码调用流程
作者其他创作
大纲/内容
被拦截
NacosServerList.getUpdatedListOfServers()
restOfinit(clientConfig)
hostReactor.getServiceInfo
setServersList(ls
LoadBalancerClient.execute
PollingServerListUpdater
@Beqan的出初始化
namingServiceInstance().selectInstances
ServerList<Server> serverList nacos服务实例列表
初始化时从配置中获取的服务实例列表(这种是单独使用ribbon的情况)
ZoneAwareLoadBalancer
RibbonLoadBalancerClient
返回对应实例列表
获取所有nacos实例列表
RibbonClientConfiguration
BaseLoadBalancer.chooseServer(key)
serverListImpl.getUpdatedListOfServers()
rule.choose(key)
getServer(loadbalancer)
@Bean
DynamicServerListLoadBalancer
enableAndInitLearnNewServersFeature()
从nacosClient里获取本地实例缓存
default 就是默认的轮询算法,底层从0开始,每次加1然后对实例列表取模得到实例数组的下标值
从容器中获取loadBalancer,可以猜一下肯定在某一个地方有@Bean的初始化
ribbon定时更新nacos 实例里列表
updateListOfServers()
clientFactory.getLoadBalancer(serviceId)
1.获取负载均衡器
ILoadBalancer loadBalancer = getLoadBalancer(serviceId)
DummyPing
一般找某个类初始化的地方,可以在使用类对象的类的同级目录找相关的Configuration 类里找
updateAllServerList(servers)
RibbonAutoConfiguration
ZonePreferenceServerListFilter
构造方法调用
将服务实例列表设置到父类的BaseLoadBalancer的allServerList
super.setServersList(lsrv)
restTemplate.getForObject(\"http://stock-service...\")
PollingServerListUpdater.start()
LoadBalancerInterceptor.intercept
loadBalancer.chooseServer('default')
ZoneAvoidanceRule
初始化父类
2.负载均衡器loadBalancer根据负载均衡算法挑选一个server
0 条评论
下一页