Ribbon 源码
2020-08-13 17:50:38
登录查看完整内容
Ribbon 源码流程
举报
猜你喜欢
大纲/内容
getUpdatedListOfServers()
通过负载均衡器获取服务实例
setPingInterval(pingIntervalTime)
start()
new ZoneAwareLoadBalancer()
只是去检查这个列表中的实例状态
缓存到 ribbon 的 map 中
NIWSDiscoveryPing
ribbon 默认的配置的@Bean被EurekaRibbonClientConfiguration覆盖了
轮询算法
启动一个 SchedulerThreadPoolExecutor 去执行,默认延迟 1 秒执行,每30秒执行一次
设置到父类的 allServersList 中
设置 ping 的间隔为30s,最大 ping 时间为 2 s
allServersList
初始化参数
serverListImpl.getUpdatedListOfServers()
restTemplate.
先拿到那些合法的 servers
getServer(loadBalancer)
DiscoveryEnabledNIWSServerList
默认
BaseLoaderBalancer.initWithConfig()
DomainExtractingServerList.getInitialListOfServers()
IPing
incrementAndGetModulo(eligible.size())
通过 eurekaClient 获取服务列表
设置一个Timer来运行 ping
updateListOfServers()
在 for 循环中循环执行 CAS ,避免了锁等待
默认实现
new Pinger(pingStrategy).runPinger()
restOfInit
过滤组件
setServersList()
PollingServerListUpdater
ZoneAwardLoadBalancer.chooseServer
DomainExtractingServerList
DynamicServerListLoadBalancer()
ZoneAvoidanceRule
默认实现,只是去检查服务列表的实例状态
serverListUpdater.start(updateAction);
设置 IPing 和 IRule
getLoadBalancer(serviceId)
updateAllServerList(servers)
setupPingTask()
ServerList<Server>eureka 服务实例的列表
DiscoveryEnabledNIWSServerList.getInitialListOfServers()
IRule
LoadBalancerInterceptor.intercept()
拿到负载均衡器
注入
RibbonLoadBalancerClient.execute()
rule.choose()
filter.getFilteredListOfServers(servers)
0 条评论
回复 删除
下一页
职业:程序员
作者其他创作: