Spring-cloud學習筆記---Ribbon原始碼剖析之攔截器Interceptor方法

饅頭太帥了發表於2020-11-13

Spring-cloud學習筆記—Ribbon原始碼剖析之攔截器Interceptor方法

1. 分析攔截器主要分析LoadBalancerInterceptor的intercept()⽅法

在這裡插入圖片描述

2. 那麼RibbonLoadBalancerClient物件是在哪裡注入的?

  1. 回到最初的⾃動配置類RibbonAutoConfiguration中,如下圖紅色框
  2. 所以說負載均衡的事情執⾏,原來交給了我們最初看到的RibbonLoadBalancerClient物件
    在這裡插入圖片描述

3. 接下來回到LoadBalancerInterceptor類中檢視intercept方法

  1. 檢視方法最後一行loadBalancer.execute方法,如下圖紅色框部分在這裡插入圖片描述
  2. 點選上圖紅色框execute方法後,進入LoadBalancerClient介面檢視execute方法,點選execute方法直接進入RibbonLoadBalancerClient實現類,檢視execute方法,RibbonLoadBalancerClientexecute()方法是⾮常核⼼的⼀個⽅法,總結如下:
    在這裡插入圖片描述
  3. 檢視關注1,點選getLoadBalancer方法
    在這裡插入圖片描述
  4. 開始懷疑ILoadBalancer例項是什麼時候注入的 ,這時回到主配置類RibbonAutoConfiguration
    在這裡插入圖片描述
  5. 點選SpringClientFactory類進行檢視,發現裡面裝配了很多東西,他在裡面也搞了一個ILoadBalancer,也是獲取例項,從裡面去拿
    在這裡插入圖片描述
  6. 主要記住SpringClientFactory類的構造器,他裡面呼叫了一個父類,父類呼叫了一個引數RibbonClientConfiguration
    在這裡插入圖片描述
  7. 檢視RibbonClientConfiguration,在這個類中裝配了⼤腦(LoadBalancer:負載均衡排程管理)和肢⼲(另外四個)
    在這裡插入圖片描述

四肢之一,自己有配置就按配置,沒有的話就按照預設的ZoneAvoidanceRule:區域權衡策略(預設策略)

在這裡插入圖片描述

大腦,自己有配置就按配置,沒有的話就按照預設的,ZoneAwareLoadBalancer:區域感知負載均衡器

在這裡插入圖片描述

相關文章