Spring Cloud中怎么配置Feign組成,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

Feign的組成
| 接口 | 作用 | 默認值 |
|---|---|---|
| Feign.Builder | Feign的入口 | Feign.Builder |
| Client | Feign底層用什么去請求 | 和Ribbon配合時:LoadBalancerFeignClient 不和Ribbon配合時:Fgien.Client.Default |
| Contract | 契約,注解支持 | SpringMVCContract |
| Encoder | 解碼器,用于將獨享轉換成HTTP請求消息體 | SpringEncoder |
| Decoder | 編碼器,將相應消息體轉成對象 | ResponseEntityDecoder |
| Logger | 日志管理器 | Slf4jLogger |
| RequestInterceptor | 用于為每個請求添加通用邏輯(攔截器,例子:比如想給每個請求都帶上heared) | 無 |
Feign的日記級別
| 日志級別 | 打印內容 |
|---|---|
| NONE(默認) | 不記錄任何日志 |
| BASIC | 僅記錄請求方法,URL,響應狀態代碼以及執行時間(適合生產環境) |
| HEADERS | 記錄BASIC級別的基礎上,記錄請求和響應的header |
| FULL | 記錄請求和弦ineader,body和元數據 |
首先如何整合Feign
遵循SpringBoot的三板斧第一步:加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
第二步:寫注解
@EnableFeignClients //在啟動類上加
第三步:寫配置
如何給Feign添加日志級別
細粒度
方式一:代碼實現第一步:添加Feign配置類,可以添加在主類下,但是不用添加@Configuration。如果添加了@Configuration而且又放在了主類之下,那么就會所有Feign客戶端實例共享,同Ribbon配置類一樣父子上下文加載沖突;如果一定添加@Configuration,就放在主類加載之外的包。建議還是不用加@Configuration。
public class FeignConfig {
@Bean
public Logger.Level Logger() {
return Logger.Level.FULL;
}
}第二步:給@FeignClient添加配置類
//@FeignClient configuration = GoodsFeignConfig.class 細粒度配置,指定配置類 @FeignClient(name = "goods", configuration = FeignConfig.class)
第四步:寫配置
logging: level: com.xxx.xxx.FeignAPI: DEBUG #需要將FeignClient接口全路徑寫上# 開啟日志 格式為logging.level. Feign客戶端路徑
方式二:配置屬性實現
feign: client: config: #想要調用的微服務名稱 server-1: loggerLevel: FULL
全局配置
方式一:代碼實現添加了@Configuration放在了主類之下,那么就會所有Feign客戶端實例共享,同Ribbon配置類一樣父子上下文加載沖突;讓父子上下文ComponentScan重疊(強烈不建議)唯一正確方式
//在啟動類上為@EnableFeignClients注解添加defaultConfiguration配置 @EnableFeignClients(defaultConfiguration = FeignConfig.class)
方式二:配置屬性實現
feign: client: config: #將調用的微服務名稱改成default就配置成全局的了 default: loggerLevel: FULL
Feign支持的配置項
代碼方式
| 配置項 | 作用 |
|---|---|
| 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配置 VS Feign配置
| 粒度 | Ribbon | Feign |
|---|---|---|
| 代碼局部 | @RibbonClient(configuration=RibbonConfig.class),RibbonConfig類必須加@Configuration,且必須放在父上下文無法掃到的包下 | @FeignClient(configuration=FeignConfig.class),FeignConfig類的@Configuration可以不加(可選),如果有,必須放在父上下文無法掃到的包下 |
| 代碼全局 | @RibbonClients(defaultConfigurtion=RibbonConfig.class) | @EnableFeignClients(defaultConfiguration = FeignConfig.class) ... |
| 配置屬性局部 | .ribbon.NFLoadBalancerClassName ... | feign.client.config..loggerLevel ... |
| 配置屬性全局 | 無 | feign.client.config.default.loggerLevel |
Feign 代碼方式 VS 配置屬性方式
| 配置方式 | 有點 | 缺點 |
|---|---|---|
| 代碼配置 | 基于代碼,更加靈活 | 如果Feign的配置類加了@Configuration注解,需注意父子上下文,線上修改需要重打包,發布 |
| 屬性配置 | 易上手 配置更加直觀 線上修改無需重新打包,發布 優先級更高 | 極端場景下沒有代碼配置更加靈活 |
看完上述內容,你們掌握Spring Cloud中怎么配置Feign組成的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯網站建設公司行業資訊頻道,感謝各位的閱讀!
另外有需要云服務器可以了解下創新互聯建站www.yijiale78.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享文章:SpringCloud中怎么配置Feign組成-創新互聯
網頁鏈接:http://www.yijiale78.com/article28/csppjp.html
成都網站建設公司_創新互聯,為您提供定制網站、響應式網站、網站建設、網站設計、品牌網站制作、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯