ribbon
2021-04-21 16:20:43 5 举报
登录查看完整内容
ribbon
作者其他创作
大纲/内容
ServiceA
LoadBalancerRequest.apply()
font color=\"#ff3333\
ZoneAwareLoadBalancer
mapServiceA 独立的spring容器 ApplicationContextServiceB 独立的spring容器 ApplicationContextServiceC 独立的spring容器 ApplicationContext
reconstructURI构造请求的url
依赖 LoadBalancerClientLoadBalancerRequestFactoryLoadBalancerRequest
updateAction开启一个scheduled,1s后定时每30s调用updateListOfServers
setPingInterval()setupPingTask()
SpringClientFactory
父类DynamicServerListLoadBalancer
AbstractServerPredicate类的chooseRoundRobinAfterFiltering方法默认的 round robin轮询算法eligible.get(nextIndex.getAndIncrement() % eligible.size())
restTemplate中添加LoadBalancerInterceptor拦截器,对请求进行拦截
RibbonLoadBalancerClient
LoadBalancerAutoConfiguration
LoadBalancerRequestFactorycreateRequest->LoadBalancerRequest
获取到ZoneAwareLoadBalancer
ServiceRequestWrapper.getUrl()服务名转服务实例ip端口
IPing.isAlive()
SmartInitializingSingleton
@LoadBalanced 注入一个RestTemplate 入口
RibbonClientConfiguration向容器注册一个ZoneAwareLoadBalancer
restOfInit()其余初始化,初始化serverList
BaseLoadBalancer中的initWithConfig()->
注册
restTemplate.getForObject
DomainExtractingServerList的getUpdatedListOfServers最终调用obtainServersViaDiscovery
LoadBalancerInterceptor
super.setServersList(lsrv)将serverList加入到BaseLoadBalancer的allServers中
LoadBalancerInterceptor的intercept方发进行拦截
RestTemplateCustomizer
ServiceA 独立的spring容器 ApplicationContext
choose 选择服务实例
ZoneAwareLoadBalancerServiceA ->192.168.22.1:8021192.168.22.3:8921
DiscoveryEnabledNIWSServerListEureka的客户端,从本地缓存获取服务列表
updateListOfServers更新服务列表
ClientHttpRequest.execute()发送合http请求
0 条评论
回复 删除
下一页