ribbon源码流程
2021-05-15 23:04:35 13 举报
ribbon源码流程
作者其他创作
大纲/内容
添加拦截器
新建ZoneAwareLoadBalancer 默认的负载均衡器
incrementAndGetModulo()主要就是用当前值+1 和 服务数量进行取模,并且将当前值修改为计算出来的值
2:RibbonAutoConfiguration
eureka和ribbon整合相关的代码,提供的一个ServerList
EurekaClient
RibbonClientConfiguration
轮训去选择一个server
调用者
Bean注入
新建LoadBalancerInterceptor 的时候注入了需要注入 LoadBalancerClient实际上是其子类的:LoadBalancerInterceptor执行intercept()实际是执行RibbonLoadBalancerClient 调用execute()
EurekaServer
最终来到RoundRobinRule.choose()
新建RibbonLoadBalancerClient()
RestTemplateCustomizer给所有标记了@LoadBlanaced的restTemplete设置拦截器
服务列表定时维护
负载均衡器创建完成
调用拦截方法选择负载均衡拦截器
1:使用 IPing 的实现类 PingUrl,每隔30秒会去 Ping 服务地址,如果返回状态不是 200,那么默认该实例下线;springcloud环境下IPing组件是不生效的,不用ribbon自己去判断server是否存活,eureka自己处理判断
spring自动装配
拦截器
EurekaRibbonClientConfiguration
父类:DynamicServerListLoadBalancer.restOfInit()
//更新服务的serverlistthis.updateListOfServers();
主要是处理关于Eureka
super
updateAction.doUpdate();
1:EurekaClientAutoConfiguration
3:LoadBalancerAutoConfiguration
Server server = getServer(loadBalancer);
@LoadBalanced注解restTemplate.getForObject()
0 条评论
下一页