總結

--------------------------------
Spring Cloud核心元件:Feign
現在訂單服務确實知道庫存服務、積分服務、倉庫服務在哪裡了,同時也監聽着哪些端口号了。但是新問題又來了:難道訂單服務要自己寫一大堆代碼,跟其他服務建立網絡連接配接,然後構造一個複雜的請求,接着發送請求過去,最後對傳回的響應結果再寫一大堆代碼來處理嗎?
這是上述流程翻譯的代碼片段,咱們一起來看看,體會一下這種絕望而無助的感受!!!
友情提示,前方高能:
看完上面那一大段代碼,有沒有感到後背發涼、一身冷汗?實際上你進行服務間調用時,如果每次都手寫代碼,代碼量比上面那段要多至少幾倍,是以這個事壓根兒就不是地球人能幹的。
既然如此,那怎麼辦呢?别急,Feign早已為我們提供好了優雅的解決方案。來看看如果用Feign的話,你的訂單服務調用庫存服務的代碼會變成啥樣?
看完上面的代碼什麼感覺?是不是感覺整個世界都幹淨了,又找到了活下去的勇氣!沒有底層的建立連接配接、構造請求、解析響應的代碼,直接就是用注解定義一個 FeignClient接口,然後調用那個接口就可以了。人家Feign Client會在底層根據你的注解,跟你指定的服務建立連接配接、構造請求、發起靕求、擷取響應、解析響應,等等。這一系列髒活累活,人家Feign全給你幹了。
那麼問題來了,Feign是如何做到這麼神奇的呢?很簡單,Feign的一個關鍵機制就是使用了動态代理。咱們一起來看看下面的圖,結合圖來分析:
首先,如果你對某個接口定義了@FeignClient注解,Feign就會針對這個接口建立一個動态代理
接着你要是調用那個接口,本質就是會調用 Feign建立的動态代理,這是核心中的核心
Feign的動态代理會根據你在接口上的@RequestMapping等注解,來動态構造出你要請求的服務的位址
最後針對這個位址,發起請求、解析響應
作者:石杉的架構筆記