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秒一次,執行PingTaskrun方法。
在這裏插入圖片描述

PingTask

默認策略是SerialPingStrategy,就是依次去發送Ping請求。
在這裏插入圖片描述
好了,下次再分析後面的restOfInit方法,裏面涉及到服務列表更新和定時器任務:
在這裏插入圖片描述

好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章