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

本文深入剖析SpringCloud中Ribbon的执行流程,包括RibbonClientConfiguration实例配置、负载均衡策略、服务列表更新机制及定时任务PingTask的工作原理,旨在帮助读者理解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秒一次,执行PingTaskrun方法。
在这里插入图片描述

PingTask

默认策略是SerialPingStrategy,就是依次去发送Ping请求。
在这里插入图片描述
好了,下次再分析后面的restOfInit方法,里面涉及到服务列表更新和定时器任务:
在这里插入图片描述

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值