Soul閘道器探秘 springcloud外掛程式原理

2022-07-06 21:00:22 字數 1800 閱讀 6194

文章首發於 csdn個人部落格

外掛程式定位

springcloud 外掛程式是乙個 springcloud 正向**外掛程式,所有的 springcloud 請求都由該外掛程式進行負載均衡處理。

生效時機

當請求頭的 rpctype = springcloud 且外掛程式啟用時,它將根據請求引數匹配規則,最終交由下游外掛程式進行響應式**呼叫。

1)先回顧下請求處理類外掛程式的通用流程(abstractsoulplugin # execute):

public monoexecute(final serverwebexchange exchange, final soulpluginchain chain)  else 

...// 執行自定義處理

return doexecute(exchange, chain, selectordata, rule);

}// 繼續執行外掛程式鏈處理

return chain.execute(exchange);

}

abstractsoulplugin 判斷外掛程式是否存在且啟用:

2)再來看看 springcloud 外掛程式的自定義處理流程(springcloudplugin # doexecute):

protected monodoexecute(final serverwebexchange exchange, final soulpluginchain chain, final selectordata selector, final ruledata rule)
springcloudplugin 先獲取到選擇器處理物件,然後使用負載均衡器根據處理物件的服務 id 選擇服務例項並重建 uri,據此 uri 生成真實的 url,最後設定最終的 url 和超時時間交由外掛程式鏈下游進行處理。

注意:

springcloud 外掛程式自身只是負責根據選擇器、規則和注入的負載均衡器選出待分發的伺服器例項,並不直接向後端服務發起請求。

springcloud 外掛程式在處理過程中,外掛程式本身並不承擔如 divide 外掛程式一般的探活和負載均衡的職責,而是交由乙個負載均衡器去處理。

該負載均衡器需要實現 org.springframework.cloud.client.loadbalancer.loadbalancerclient,官方使用的是 org.springframework.cloud.netflix.ribbon.ribbonloadbalancerclient。

ribbon 是 netflix 發布的乙個開源的客戶端負載均衡器,是 springcloud-netflix 中重要的一環,通過它將 netflix 的中間層服務連線在一起。

ribbon 客戶端元件提供一系列完善的配置項,如連線超時、重試等。簡單的說,就是在配置檔案中列出 load balancer 後面所有的服務,ribbon 會自動的基於某種規則(如簡單輪詢,隨機連線等)去連線這些服務,也很容易實現自定義的負載均衡演算法。

ribbon 是在客戶端來實現負載均衡的訪問服務,主要的功能:

通過整合 ribbon,springcloud 外掛程式可以輕易地實現 springcloud 服務的服務發現及負載均衡策略。

在 springcloud 外掛程式中,ribbon 主要承擔以下職責:

springcloud 外掛程式通過負載均衡器,實現了對 springcloud 服務的負載均衡,選擇出乙個有效服務的真實 url 後,交由外掛程式鏈下游進行處理。

負載均衡器是 springcloud 外掛程式中至關重要的一環,外掛程式的負載均衡器預設使用 ribbon 實現。

Soul閘道器原始碼探秘《九》 請求處理流程

前文探索外掛程式鏈時提到,當有接收到乙個請求的時候,會到達soulwebhandler的handle。本文會探索使用divideplugin外掛程式接收乙個請求到最終返回的全過程。在handle打上斷點,發起請求。可以通過左側呼叫棧來一點一點往前推處理的邏輯。首先是進入到defaultwebfilt...

soul閘道器學習筆記二

目錄 web專案如何引入soul閘道器 壓力測試 第二天學習分析 總結 相關使用文件可參考官方文件 今天是學習soul閘道器的第二天,今天的目標是使用soul專案提供的http例子,學會如何在業務專案中引入使用soul。在soul專案裡面有個子模組 soul examples,官方例子。其中http...

Soul閘道器外掛程式之Spring Cloud

出現這個錯誤的主要原因是因為。soul examples裡面的springcloud外掛程式專案使用的預設註冊中心是eureka,pom檔案中也是eureka。即使yml中配置檔案修改了也沒用。因此需要講示例中心中的pom依賴修改為nacos的依賴。重啟即可解決問題 註冊成功後,被成功 的介面列表 ...