接口 |
做用 |
默認值 |
---|---|---|
Feign.Builder |
Feign的入口 |
Feign.Builder |
Client |
Feign底層用什麼去請求 |
和Ribbon配合時:LoadBalancerFeignClient 不和Ribbon配合時: Fgien.Client.Default |
Contract |
契約,註解支持 |
SpringMVCContract |
Encoder |
解碼器,用於將獨享轉換成HTTP請求消息體 |
SpringEncoder |
Decoder |
編碼器,將相應消息體轉成對象 |
ResponseEntityDecoder |
Logger |
日誌管理器 |
Slf4jLogger |
RequestInterceptor |
用於爲每一個請求添加通用邏輯(攔截器,例子:好比想給每一個請求都帶上heared) |
無 |
日誌級別 |
打印內容 |
---|---|
NONE(默認) |
不記錄任何日誌 |
BASIC |
僅記錄請求方法,URL,響應狀態代碼以及執行時間(適合生產環境) |
HEADERS |
記錄BASIC級別的基礎上,記錄請求和響應的header |
FULL |
記錄請求和絃ineader,body和元數據 |
遵循SpringBoot的三板斧第一步:加依賴web
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
第二步:寫註解spring
@EnableFeignClients //在啓動類上加
第三步:寫配置json
方式一:代碼實現第一步:添加Feign配置類,能夠添加在主類下,可是不用添加@Configuration
。若是添加了@Configuration
並且又放在了主類之下,那麼就會全部Feign客戶端實例共享,同Ribbon配置類同樣父子上下文加載衝突;若是必定添加@Configuration
,就放在主類加載以外的包。建議仍是不用加@Configuration
。app
public class FeignConfig { @Bean public Logger.Level Logger() { return Logger.Level.FULL; } }
第二步:給@FeignClient
添加配置類svg
//@FeignClient configuration = GoodsFeignConfig.class 細粒度配置,指定配置類 @FeignClient(name = "goods", configuration = FeignConfig.class)
第四步:寫配置wordpress
logging: level: com.xxx.xxx.FeignAPI: DEBUG #須要將FeignClient接口全路徑寫上# 開啓日誌 格式爲logging.level. Feign客戶端路徑
方式二:配置屬性實現微服務
feign: client: config: #想要調用的微服務名稱 server-1: loggerLevel: FULL
方式一:代碼實現添加了@Configuration
放在了主類之下,那麼就會全部Feign客戶端實例共享,同Ribbon配置類同樣父子上下文加載衝突;讓父子上下文ComponentScan重疊(強烈不建議)惟一正確方式ui
//在啓動類上爲@EnableFeignClients註解添加defaultConfiguration配置 @EnableFeignClients(defaultConfiguration = FeignConfig.class)
方式二:配置屬性實現編碼
feign: client: config: #將調用的微服務名稱改爲default就配置成全局的了 default: loggerLevel: FULL
配置項 |
做用 |
---|---|
Logger.Level |
指定日誌級別 |
Retryer |
指定重試策略 |
ErrorDecoder |
指定錯誤解碼器 |
Request.Options |
超時時間 |
Collection
|
攔截器 |
SetterFactory |
用於設置Hystrix的配置屬性,Fgien整合Hystrix纔會用 |
feign: client: config: feignName: connectTimeout: 5000 # 至關於Request.Optionsn 鏈接超時時間 readTimeout: 5000 # 至關於Request.Options 讀取超時時間 loggerLevel: full # 配置Feign的日誌級別,至關於代碼配置方式中的Logger errorDecoder: com.example.SimpleErrorDecoder # Feign的錯誤解碼器,至關於代碼配置方式中的ErrorDecoder retryer: com.example.SimpleRetryer # 配置重試,至關於代碼配置方式中的Retryer requestInterceptors: # 配置攔截器,至關於代碼配置方式中的RequestInterceptor - com.example.FooRequestInterceptor - com.example.BarRequestInterceptor # 是否對404錯誤解碼 decode404: false encode: com.example.SimpleEncoder decoder: com.example.SimpleDecoder contract: com.example.SimpleContract
Feign還支持對請求和響應進行GZIP壓縮,以提升通訊效率,配置方式以下:日誌
# 配置請求GZIP壓縮 feign.compression.request.enabled=true # 配置響應GZIP壓縮 feign.compression.response.enabled=true # 配置壓縮支持的MIME TYPE feign.compression.request.mime-types=text/xml,application/xml,application/json # 配置壓縮數據大小的下限 feign.compression.request.min-request-size=2048
粒度 |
Ribbon |
Feign |
---|---|---|
代碼局部 |
@RibbonClient(configuration=RibbonConfig.class) ,RibbonConfig 類必須加@Configuration ,且必須放在父上下文沒法掃到的包下 |
@FeignClient(configuration=FeignConfig.class) ,FeignConfig 類的@Configuration 能夠不加(可選),若是有,必須放在父上下文沒法掃到的包下 |
代碼全局 |
@RibbonClients(defaultConfigurtion=RibbonConfig.class) |
@EnableFeignClients(defaultConfiguration = FeignConfig.class) ... |
配置屬性局部 |
... |
feign.client.config.
... |
配置屬性全局 |
無 | feign.client.config.default.loggerLevel |
配置方式 |
有點 |
缺點 |
---|---|---|
代碼配置 |
基於代碼,更加靈活 |
若是Feign的配置類加了@Configuration 註解,需注意父子上下文,線上修改須要重打包,發佈 |
屬性配置 |
易上手 配置更加直觀 線上修改無需從新打包,發佈 優先級更高 |
極端場景下沒有代碼配置更加靈活 |
優先級:細粒度屬性配置 > 細粒度代碼配置 > 全局屬性配置 > 全局代碼配置