Spring Cloud是當前煊赫一時的微服務開發框架。它的功能強大,組件豐富,設計優雅。目前Spring Cloud還在不斷髮展之中。git
Spring Cloud即將發佈Spring Cloud Edgware 版本。該版本解決了很多Bug,新增了很多新特性,本系列博客將爲你們詳細闡述在Spring Cloud Edgware中新增的特性。github
咱們知道:spring
該遺憾已在Spring Cloud Edgware 獲得了填補——今後,Feign也支持配置屬性自定義配置啦!微信
下面咱們來看看如何使用配置屬性自定義Feign的行爲:框架
配置指定名稱的Feign Client微服務
對於一個指定名稱的Feign Client(例如該Feign Client的名稱爲feignName ):設計
feign: client: config: feignName: connectTimeout: 5000 # 至關於Request.Options readTimeout: 5000 # 至關於Request.Options # 配置Feign的日誌級別,至關於代碼配置方式中的Logger loggerLevel: full # Feign的錯誤解碼器,至關於代碼配置方式中的ErrorDecoder errorDecoder: com.example.SimpleErrorDecoder # 配置重試,至關於代碼配置方式中的Retryer retryer: com.example.SimpleRetryer # 配置攔截器,至關於代碼配置方式中的RequestInterceptor requestInterceptors: - com.example.FooRequestInterceptor - com.example.BarRequestInterceptor decode404: false
通用配置日誌
上面討論瞭如何配置特定名稱的Feign Client,那麼若是想爲全部的Feign Client都進行配置,該怎麼辦呢?咱們知道,@EnableFeignClients 註解上有個defaultConfiguration 屬性,咱們能夠將默認配置寫成一個類,而後用defaultConfiguration 來引用,例如:code
@EnableFeignClients(defaultConfiguration = DefaultRibbonConfig.class)
那麼若是想使用配置屬性該怎麼辦呢?開發
若是你想配置全部的Feign Client,只需像以下配置便可:
feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic
若是你不當心又使用了Java代碼配置Feign,同時又使用了配置屬性配置Feign,那麼使用配置屬性的優先級更高。配置屬性配置的方式將會覆蓋Java代碼配置。若是你想修改代碼配置方式的優先級,可以使用以下屬性:feign.client.default-to-properties=false 。
TIPS:
使用代碼自定義Feign的官方文檔:http://cloud.spring.io/spring-cloud-static/Camden.SR3/#spring-cloud-feign-overriding-defaults
引入該特性的相關pull request:https://github.com/spring-cloud/spring-cloud-netflix/pull/1942
我的並不建議配置retryer,Spring Cloud Camden以及以後的版本中,Spring Cloud關閉了Feign的重試,而是使用Ribbon的重試。若是本身再定義Feign的重試後,那麼可能會形成重試特性的混亂。筆者已在https://github.com/spring-cloud/spring-cloud-netflix/issues/2330 提出該問題。
本文連接: http://www.itmuch.com/spring-cloud/edgware-new-feign-properties/