基本流程图

Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

RibbonClientConfiguration的实例

配置信息

Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

负载均衡的策略

其实他等于是一个轮询,只是加了一些过滤器,根据一些条件过滤服务器,里面默认是轮询RoundRobinRule
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二
父类:
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

服务列表更新器

内部有定时器定时更新服务列表。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

负载均衡器

把配置,策略,Ping,服务更新器都整合起来了。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

EurekaRibbonClientConfiguration的实例

真正的Ping实例

其实前面RibbonClientConfiguration里面也有个,但是不干什么,直接返回Ping没问题,这个才是干事的。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

提取服务列表

这个里面可以获取Eureka客户端,然后获取服务列表。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

ZoneAwareLoadBalancer的创建

这里就ZoneAwareLoadBalancer比较关键,要先分析下,里面涉及到Ping的定时器和服务获取的定时器。
首先看他父类DynamicServerListLoadBalancer的构造方法:
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

BaseLoadBalancer的initWithConfig

里面有各种配置。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

设置规则和Ping

Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

setRule

默认RoundRobinRule要被ZoneAvoidanceRule代替。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二
但是ZoneAvoidanceRule底层还是RoundRobinRule
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

setPing

设置了Ping任务对象。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

setupPingTask开启定时任务

无延迟,间隔30秒一次,执行PingTaskrun方法。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

PingTask

默认策略是SerialPingStrategy,就是依次去发送Ping请求。
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二
好了,下次再分析后面的restOfInit方法,里面涉及到服务列表更新和定时器任务:
Spring Cloud 2.2.2 源码之十六Ribbon执行原理二

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

相关文章: