ribbon核心流程图
2021-12-13 12:57:58 0 举报
ribbon核心流程图
作者其他创作
大纲/内容
updateListOfServers
执行请求
IPing实现类 DummyPing
chooseServer从注册表中选择本次执行请求server
入口标注@LoadBalanced的RestTemplate
1、获取当前是第几个,第一次就是02、获取下一个,(当前+1)/总数取余3、将下一个算出来的设置给下一次当前的数4、返回下一个的数去获取server
RestTemplate的getForObject()请求http://serviceA/sayHello/name
ServerListFilter实现类ZonePreferenceServerListFilter服务注册列表过滤器(这里注重分区过滤,在我的使用场景中使用不上)
DynamicServerListLoadBalancer
将请求交给ribbon相关的负载均衡组件来处理(传入服务名、构造出来的LoadBalancerRequest)
ServerListUpdater.UpdateAction
从配置中获取写死的ServerList,在生产环境中我们一般是配合注册中心使用
获取服务对应的ServerList
延迟1s,每隔30s一次
nacos
RibbonClientConfiguration所有组件的创建都是有限判断配置中是否配置,若无,再走默认组件创建逻辑
按域空间过滤满足条件的注册表
抓取注册表
updateAllServerList
eureka
被拦截
2、过滤注册表
根据当前服务名称到SpringClientFactory获取当前服务实例对应的ILoadBalancer是一个map结构
支撑
触发一个xxxRibbon的xxxAutoConfigurationLoadBalancerAutoConfiguration
支撑选择
ribbon三剑客之一
抓取注册表ServerList.getUpdatedListOfServers这里的实现有多种,比如接入的注册中心是eureka,或者是nacos等等
3、更新注册表
BaseLoadBalancer.chooseServer
IRule.choose根据key(default)轮询选择一个可用的server
为所有的RestTemplate定制化,并且设置一个拦截器
ServerListUpdater服务注册信息更新组件(延迟1s,每隔30s一次)PollingServerListUpdater,这里是一个准备了一个线程类
客户端发起请求
EurekaClient这里就可以结合Eureka源码分析来看
RestTemplateCustomizer定制器
根据选择出来的server封装信息
ServerListConfigurationBasedServerList,获取服务注册信息的核心组件
过滤注册表ServerListFilter.getFilteredListOfServers
IClientConfig为每个服务创建一个客户端的配置连接超时时间:1000ms读超时时间:1000ms是否开启gzip:true
通过路由规则选择server
拦截器
RibbonLoadBalancerClient
核心组件LoadBalancerClientRibbonLoadBalancerClient
LoadBalancerRequest.applyServiceRequestWrapper.getUrl完成url的替换
2、选择注册表并执行请求
DiscoveryEnabledNIWSServerList
RibbonLoadBalancerClient.RibbonServer构建该实例,封装信息
RibbonLoadBalancerClient.execute传入服务名称、服务实例、服务请求
chooseServerZoneAwareLoadBalancer
我们通常对于ribbon的使用都是走这里
BaseLoadBalancer设置ping时间(默认30s)设置ping最大次数(默认2次)设置负载均衡IRule组件设置Ping组件
默认是轮训的策略,算法
提供拦截服务
NacosServerList
RestTemplate这里的RestTemplate是定制化后带有拦截器的
触发
1、抓取注册表
ILoadBalancer实现类 ZoneAwareLoadBalancerRibbonClientConfiguration以上所有组件都需要组装到该核心组件中
intercepter使用LoadBalancerRequestFactory构造一个LoadBalancerRequest请求
LoadBalancerRequestFactory
真实的请求http://192.168.162.1:8080/sayHello/name
1、获取注册表
开启服务注册信息更新组件线程
IRule默认RoundRobinRule负载均衡的核心组件
LoadBalancerInterceptorConfigLoadBalancerInterceptor拦截器,包含了RibbonLoadBalancerClient、LoadBalancerRequestFactory
restOfInit核心方法
List<RestTemplate>
返回结果
enableAndInitLearnNewServersFeature
线程核心逻辑也是走这里
RibbonAutoConfiguration
0 条评论
下一页