Feign

一:概念

它整合了Ribbon和Hystrix,從而讓我們不再需要顯式地使用這兩個組件。

默認情況下Feign會將所有Feign客戶端的方法都封裝到Hystrix命令中進行保護。

使用@FeignClient創建Feign客戶端的時候,會同時根據該註解的name屬性或者value屬性指定的服務名自動創建一個同名的Ribbon客戶端。

Feign 還提供了HTTP請求的模板,通過編寫簡單的接口和插入註解,我們就可以定義好HTTP請求的參數、格式、地址等信息。接下來,Feign會完全代理HTTP的請求,我們只需要像調用方法一樣調用它就可以完成服務請求。

要想使用 Feign,至少需要以下三個依賴

spring-boot-starter-web

spring-cloud-starter-openfeign

spring-cloud-starter-netflix-eureka-client

二:調用流程

1:啓動類上註解@enableFeignClients開啓FeignClient功能,只有這個註解的時候纔會在程序啓動的時候開啓對@FeignClient註解的包掃描

2:根據Feign的規則實現接口,並在接口上加@FeignClient

3:程序啓動後進行包掃描,掃描所有的@FeignClient註解的類,並將這些信息註解到IoC容器中

4:接口的方法被調用時,通過jdk的動態代理生成具體的RequestTemplae模板對象

5:根據RequestTemplate對象生成Http請求的Request對象

6:request對象交給client處理,client的網絡請求框架HttpClient或OkHttp

7:最後client被封裝到LoadBalanceClient類,這個類結合Ribbon做到負載均衡。

三:日誌配置

Spring Cloud Feign在構建被@FeignClient註解修飾的Feign 客戶端對象時,會爲每一個客戶端創建一個feign.Logger實例。可以利用該日誌對象的DEBUG模式來分析Feign的請求細節。具體操作有2步:

首先需要在application.yml的配置文件中開啓指定客戶端的DEBUG日誌,其中<FeignClientPath>Feig客戶端定義接口的完整路徑。 logging.level.<FeignClientPah>

然後需要在主類中直接加入Logger.Level的Bean創建。

 

Logger的級別有四種:

NONE:不記錄任何信息

BASIC:僅記錄請求方法,url以及響應狀態碼和執行時間

HEADERS:在basic的基礎上,還記錄請求和響應的頭消息

ALL:記錄所有的請求和響應明細

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章