Feign + Ribbon + Eureka 結(jié)合使用的邏輯

一、圖解

Feign + Eureka + Ribbon.png

二、說明

這里將重點(diǎn)分為5點(diǎn),具體如下:

1. 注冊FeignClient工廠Bean

為注釋了FeignClient的接口注冊一個FeignClientFactoryBean,之后便可以被注入到其他的Bean中;

2. 生產(chǎn)動態(tài)代理對象

FeignClientFactoryBean利用Feign.builder生產(chǎn)出動態(tài)代理對象;

3. Eureka客戶端獲取實(shí)例

Eureka客戶端會定期從Eureka服務(wù)端拉取最新的服務(wù)列表,Eureka客戶端是由Spring注入;

4. Eureka服務(wù)端維護(hù)列表

Eureka服務(wù)端的實(shí)例列表是由一個二級緩存ResponseCache和一個注冊表ConcurrentHashMap構(gòu)成,通過各種由Resource類映射的Rest接口維護(hù),Eureka服務(wù)端是由Spring注入并在容器的生命周期方法中初始化和啟動;

5. 調(diào)用動態(tài)代理對象接口

5.1 提交Feign請求

動態(tài)代理對象調(diào)用接口方法,方法被封裝成一個Feign請求提交給Feign客戶端,Spring整合了Feign和 Ribbon的代碼后,LoadBalancerFeignClient作為一個Feign客戶端接受請求。

5.2 提交負(fù)載均衡請求

LoadBalancerFeignClient客戶端將請求封裝為Ribbon的負(fù)載均衡請求并提交給負(fù)載均衡客戶端,Spring 整合了Ribbon 和 Feign的代碼,F(xiàn)eignLoadBalancer 作為一個負(fù)載均衡客戶端接受請求

5.3 負(fù)載均衡器選擇服務(wù)實(shí)例

負(fù)載均衡客戶端使用負(fù)載均衡器ILoadBalancer選擇服務(wù)實(shí)例,整合了Eureka的代碼后,DiscoveryEnabledNIWSServerList為負(fù)載均衡器提供服務(wù)實(shí)例列表,DiscoveryEnabledNIWSServerList 持有Eureka客戶端實(shí)例

5.4 執(zhí)行Feign請求

延續(xù)第5點(diǎn),負(fù)載均衡客戶端選出服務(wù)實(shí)例后,將請求封裝為Feign提交給Feign客戶端,這里的Feign客戶端不再是LoadBalancerFeignClient,而是實(shí)際執(zhí)行遠(yuǎn)程訪問的feign客戶端,如Client.Default/ApacheHttpClient/OkHttpClient

5.5 獲取Feign請求結(jié)果并解碼

feign客戶端執(zhí)行請求后返回feign響應(yīng),feign響應(yīng)最終通過解碼,將請求結(jié)果返回給調(diào)用方法,整個流程結(jié)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容