SpringCloud - Feign 動態代理拼接URL地址


總結

Feign:基於Feign的動態代理機制,根據注解和選擇的機器,拼接請求URL地址,發起請求

Feign包含了Ribbon,其中請求的URL中的IP地址,就是Ribbon的負載均衡來尋找的

 

 

 

--------------------------------

 

Spring Cloud核心組件:Feign

現在訂單服務確實知道庫存服務、積分服務、倉庫服務在哪里了,同時也監聽着哪些端口號了。但是新問題又來了:難道訂單服務要自己寫一大堆代碼,跟其他服務建立網絡連接,然后構造一個復雜的請求,接着發送請求過去,最后對返回的響應結果再寫一大堆代碼來處理嗎?

這是上述流程翻譯的代碼片段,咱們一起來看看,體會一下這種絕望而無助的感受!!!

友情提示,前方高能:

 

看完上面那一大段代碼,有沒有感到后背發涼、一身冷汗?實際上你進行服務間調用時,如果每次都手寫代碼,代碼量比上面那段要多至少幾倍,所以這個事壓根兒就不是地球人能干的。

既然如此,那怎么辦呢?別急,Feign早已為我們提供好了優雅的解決方案。來看看如果用Feign的話,你的訂單服務調用庫存服務的代碼會變成啥樣?

@FeignClient

 

看完上面的代碼什么感覺?是不是感覺整個世界都干凈了,又找到了活下去的勇氣!沒有底層的建立連接、構造請求、解析響應的代碼,直接就是用注解定義一個 FeignClient接口,然后調用那個接口就可以了。人家Feign Client會在底層根據你的注解,跟你指定的服務建立連接、構造請求、發起靕求、獲取響應、解析響應,等等。這一系列臟活累活,人家Feign全給你干了。

那么問題來了,Feign是如何做到這么神奇的呢?很簡單,Feign的一個關鍵機制就是使用了動態代理。咱們一起來看看下面的圖,結合圖來分析:

  • 首先,如果你對某個接口定義了@FeignClient注解,Feign就會針對這個接口創建一個動態代理
  • 接着你要是調用那個接口,本質就是會調用 Feign創建的動態代理,這是核心中的核心
  • Feign的動態代理會根據你在接口上的@RequestMapping等注解,來動態構造出你要請求的服務的地址
  • 最后針對這個地址,發起請求、解析響應


作者:石杉的架構筆記
鏈接:https://juejin.cn/post/6844903705553174541
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM