在前面的學習中,我們使用了Ribbon的負載均衡功能,大大簡化了遠程調用時的代碼:
String baseUrl = "http://user-service/user/";
User user = this.restTemplate.getForObject(baseUrl + id, User.class)
如果就學到這里,你可能以后需要編寫類似的大量重復代碼,格式基本相同,無非參數不一樣。有沒有更優雅的方式,來對這些代碼再次優化呢?
這就是我們接下來要學的Feign的功能了。
1.1.簡介
有道詞典的英文解釋:

為什么叫偽裝?
Feign可以把Rest的請求進行隱藏,偽裝成類似SpringMVC的Controller一樣。你不用再自己拼接url,拼接參數等等操作,一切都交給Feign去做。
項目主頁:https://github.com/OpenFeign/feign

1.2.快速入門
1.2.1.導入依賴
-
-
@FeignClient,聲明這是一個Feign客戶端,類似@Mapper注解。同時通過value屬性指定服務名稱 -
接口中的定義方法,完全采用SpringMVC的注解,Feign會根據注解幫我們生成URL,並訪問獲取結果
改造原來的調用邏輯,不再調用UserDao:
我們在啟動類上,添加注解,開啟Feign功能
你會發現RestTemplate的注冊被我刪除了。Feign中已經自動集成了Ribbon負載均衡,因此我們不需要自己定義RestTemplate了
1.2.4.啟動測試:
訪問接口:

正常獲取到了結果。
Feign中本身已經集成了Ribbon依賴和自動配置:

因此我們不需要額外引入依賴,也不需要再注冊RestTemplate對象。
另外,我們可以像上節課中講的那樣去配置Ribbon,可以通過ribbon.xx來進行全局配置。也可以通過服務名.ribbon.xx來對指定服務配置:
1.4.Hystrix支持
Feign默認也有對Hystix的集成:

只不過,默認情況下是關閉的。我們需要通過下面的參數來開啟:
但是,Feign中的Fallback配置不像Ribbon中那樣簡單了。
2)然后在UserFeignClient中,指定剛才編寫的實現類
3)重啟測試:
我們關閉user-service服務,然后在頁面訪問:

同時,我們也可以對請求的數據類型,以及觸發壓縮的大小下限進行設置:
注:上面的數據類型、壓縮大小下限均為默認值。
至此,Feign 的基本知識差不多講解完了。如有不對或是有問題不夠深入的地方還望大家指正,共同學習!
