ribbon 源码分析流程
2022-05-17 09:15:56 31 举报
微服务Ribbon组建核心源码源码分析流程
作者其他创作
大纲/内容
拦截调用execute
LoadBalancerClient
choose
setServersList
拿到具体ip+端口
chooseRoundRobinAfterFiltering
DynamicServerListLoadBalancer
这个定时任务就是为了动态获取最新服务列表状态
获取全部的service 集合,做轮训算法
allServerList = allServers;
BaseLoadBalancer.chooseServer
初始化,也会初始化父类
实现
发起请求,被拦截
lb.getAllServers()全部服务集合数据怎么来的?
开启定时任务
初始化父类
3、处理restTemplate
最后返回这个类型负载均衡器
@LoadBalanced
LoadBalancerAutoConfiguration
setPingInterval
LoadBalancerInterceptor
HTTP调用
根据不同的注册中心,调用不同的实现类,获取服务列表
先取nacos本地缓存实例列表,如果没有就会http调用nacos服务端拿
更具体的说明解释:
任务会调用个方法
父类
RibbonLoadBalancerClient
namingServiceInstance().selectInstances
从容器中找
PredicateBasedRule
属性
initWithConfig
在spring容器初始化全部的非懒加载的单例bean后,会回调这个方法
serverListUpdater.start(updateAction);
配置类
setupPingTask
ZoneAwareLoadBalancer
创建任务
updateAllServerList(servers);
IPing
获取负载均衡器
更新实例列表
遍历每一个RestTemplat都,把这个拦截器设置进去
PingUrl
赋值
restOfInit(clientConfig);
返回列表
new Pinger(pingStrategy).runPinger();
开启延时任务
NacosServerList.getUpdatedListOfServers
检查所有实例是否健康
选取一个service
关键点
@Bean
SmartInitializingSingleton
返回结果
注解
需要参数
UpdateAction
RestTemplate
2、参数传递
this.hostReactor.getServiceInfo
List<RestTemplate> restTemplates;注入全部的RestTemplate对象
ZoneAvoidanceRule
ILoadBalancer
RestTemplateCustomizer
serverListImpl.getUpdatedListOfServers();
1、参数传递
全部所有servceList
IRule
super.setServersList(lsrv);
RibbonClientConfiguration
BaseLoadBalancer
restTemplates
updateListOfServers();
RibbonAutoConfiguration
结合负载均衡器 +策略,选择service
先找到核心的配置类,有两种方式:1、根据springboot的加载特性,找到spring.factories文件2、把同包下的xxxxAutoConfiguration配置类都看看
代码实现轮训
nacos
enableAndInitLearnNewServersFeature
ILoadBalancer loadBalancer = getLoadBalancer(serviceId);
收藏
0 条评论
下一页