Feign是什麼
Feign是一個聲明式WebService客戶端。使用Feign能讓編寫Web Service客戶端更加簡單, 它的使用方法是定義一個接口,然後在上面添加註解,同時也支持JAX-RS標準的註解。Feign也支持可拔插式的編碼器和解碼器。Spring Cloud對Feign進行了封裝,使其支持了Spring MVC標準註解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支持負載均衡。
Feign 能幹什麼
Feign旨在使編寫Java Http客戶端變得更容易。
前面在使用Ribbon+RestTemplate時,利用RestTemplate對http請求的封裝處理,形成了一套模版化的調用方法。但是在實際開發中,由於對服務依賴的調用可能不止一處,往往一個接口會被多處調用,所以通常都會針對每個微服務自行封裝一些客戶端類來包裝這些依賴服務的調用。所以,Feign在此基礎上做了進一步封裝,由他來幫助我們定義和實現依賴服務接口的定義。在Feign的實現下,我們只需創建一個接口並使用註解的方式來配置它(以前是Dao接口上面標註Mapper註解,現在是一個微服務接口上面標註一個Feign註解即可),即可完成對服務提供方的接口綁定,簡化了使用Spring cloud Ribbon時,自動封裝服務調用客戶端的開發量。
Feign集成Ribbon
利用Ribbon維護了order的服務列表信息,並且通過輪詢實現了客戶端的負載均衡,而不與Ribbon不同的是,通過feign只需要定義服務綁定接口且以聲明式的方法,優雅簡單的實現了服務調用。
代碼實戰
詳細請閱讀代碼
代碼地址:https://github.com/lxwjq/lx-spring-cloud
-
連接超時時間(OpenFeign默認等待時間爲1s,超時報錯)
ribbon: ReadTimeout: 10000 #負載均衡超時時間,默認值5000 ConnectTimeout: 4000 #ribbon請求連接的超時時間,默認值2000
-
負載均衡策略配置
# feign和ribbon結合,指定策略。feign默認的是輪詢的策略,這裏的配置可以自定義 # FEIGN-PAYMENT 爲服務名稱 FEIGN-PAYMENT: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
Feign日誌級別
- NONE:默認的,不顯示任何日誌
- BASIC:僅記錄請求方法、URL、響應狀態碼及執行時間
- HEADERS:除了BASIC定義的信息外,還有請求的響應頭信息;
- FULL:除了HEADERS中定義的信息外,還有請求和響應的正文以及元數據