Spring Cloud 2.2.2 源码之十六Ribbon执行原理二
基本流程图

RibbonClientConfiguration的实例
配置信息

负载均衡的策略
其实他等于是一个轮询,只是加了一些过滤器,根据一些条件过滤服务器,里面默认是轮询RoundRobinRule。

父类:

服务列表更新器
内部有定时器定时更新服务列表。

负载均衡器
把配置,策略,Ping,服务更新器都整合起来了。

EurekaRibbonClientConfiguration的实例
真正的Ping实例
其实前面RibbonClientConfiguration里面也有个,但是不干什么,直接返回Ping没问题,这个才是干事的。

提取服务列表
这个里面可以获取Eureka客户端,然后获取服务列表。

ZoneAwareLoadBalancer的创建
这里就ZoneAwareLoadBalancer比较关键,要先分析下,里面涉及到Ping的定时器和服务获取的定时器。
首先看他父类DynamicServerListLoadBalancer的构造方法:

BaseLoadBalancer的initWithConfig
里面有各种配置。

设置规则和Ping

setRule
默认RoundRobinRule要被ZoneAvoidanceRule代替。

但是ZoneAvoidanceRule底层还是RoundRobinRule。

setPing
设置了Ping任务对象。

setupPingTask开启定时任务
无延迟,间隔30秒一次,执行PingTask的run方法。

PingTask
默认策略是SerialPingStrategy,就是依次去发送Ping请求。

好了,下次再分析后面的restOfInit方法,里面涉及到服务列表更新和定时器任务:

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。
本文深入剖析SpringCloud中Ribbon的执行流程,包括RibbonClientConfiguration实例配置、负载均衡策略、服务列表更新机制及定时任务PingTask的工作原理,旨在帮助读者理解Ribbon如何实现服务发现与负载均衡。
659

被折叠的 条评论
为什么被折叠?



