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
方法,裏面涉及到服務列表更新和定時器任務:
好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。