ribbon源码流程图
2021-12-15 09:43:28 5 举报
ribbon源码流程图
作者其他创作
大纲/内容
NIWSDiscoveryPing.isAlive()根据InstanceStatus检查Server 是否在线
http://192.168.1.46:8081/sayHello/richard
调用
启动定时任务
同步注册表
ZoneAwareLoadBalancer 构造方法
EurekaServer
7.发送具体请求到ServerA其中一个实例上
ILoadBalancer
DiscoveryEnabledNIWSServerList
upServerList:服务节点列表
RestTemplate.setInterceptors(LoadBalancerInterceptor)
与 Eureka 整合后ServerList 配置的是DomainExtractingServerList,并且DomainExtractingServerList 里还有一个DiscoveryEnabledNIWSServerList
updateAllServerList()
1.http请求
获取本地注册表
@LoadBanlancedRestTemplate
http://serviceA/sayHello/richard
执行时的调用链
负载均衡客户端LoadBalancerClient.execute()
DiscoveryClient List<InstanceInfo> 本地注册表
5.根据负载算策略选择server
负载均衡算法ZoneAvoidanceRule:轮询算法, 如果尝试了10 个节点都有问题将返回nll
PollingServerListUpdater.start()延迟1000ms 每30S 一次
3. 从URL中分离出serviceName
SpringClientFactorySpring容器,为每个服务提供一份单独的负载是配置实现
自动配置
ServerA(192.168.1.46:8083)
updateListOfServers()
2.请求被拦截
ServerA(192.168.1.46:8081)
默认配置
IPing:节点保活测试
描述: 1:LoadBalancerRequest.apply()方法创建了一个ServiceRequestWrapper 对象;span style=\"font-size: inherit;\
ServiceRequestWrapper.getURI(){// LoadBalancerClient 的 reconstructURI 才是实际替换URL的方法LoadBalancerClient.reconstructURI()}
ServerA(192.168.1.46:8082)
6.请求URL 重构
ClientHttpRequest.execute()
LoadBalancerRequest.apply()
IRule: 节点的选择
与 Eureka 整合后默认为NIWSDiscoveryPing
RibbonLoadBalancerClient
PollingServerListUpdater
server(192.168.1.46:8081)
obtainServersViaDiscovery()
首次获取
ZoneAwareLoadBalancer
将注册表数据保存到upServerList中
ClientHttpRequestExecution.execute(){createRequest(ServiceRequestWrapper.getURI)}
ZoneAvoidanceRule
ServerListUpdater.UpdateAction
LoadBalancerInterceptor.intercept()
自动装配是给RestTemplate添加了拦截器
4.从容器中获取
收藏
收藏
0 条评论
下一页