文章目錄
- 前言
- 一、OpenFeign配置使用
- 1、引入pom依賴
- 2、消費端開啟Feign服務呼叫
- 3、消費端動態代理Service介面
- 3、消費端測驗
- 二、OpenFeign日志配置
- 1、全域配置日志
- 2、針對單個服務配置日志
- 3、通過組態檔配置日志
- 1、全域配置
- 2、針對某個服務單獨配置
- 三、OpenFeign自定義攔截器
- 1、全域配置
- 2、針對某個服務單獨配置
- 總結
前言
Spring Cloud OpenFeign是Feign的升級版,目前Github上面已經更新到11.6版本了,Feign是Netflix開發的宣告式、模板化的HTTP客戶端, Feign可以幫助我們更快捷、優雅地呼叫HTTP API,

一、OpenFeign配置使用
OpenFeign的使用首先肯定得依賴Spring Cloud,作為Alibaba微服務架構,以下依賴必不可少,

1、引入pom依賴
<!-- openfeign服務呼叫 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、消費端開啟Feign服務呼叫
在訂單服務(dt-order-servic)的啟動器上開啟Feign的服務呼叫,以此來呼叫庫存服務端的介面方法,
@EnableFeignClients :開啟服務呼叫

3、消費端動態代理Service介面
@FeignClient(name = "dt-stock-service",path = "/stock")
public interface StockFeignService {
@GetMapping(value = "/getPort")
String getPort();
}
@FeignClient(name = “dt-stock-service”,path = “/stock”)
dt-stock-service:服務提供者的服務名稱,path:服務提供者的統一前綴(即Controller的前綴路徑,如果沒有就不填)

3、消費端測驗
撰寫控制器,呼叫服務暴露介面方法:


二、OpenFeign日志配置
在默認情況下,OpenFeign默認的日志是關閉的,在我們開發程序中,需要除錯介面,或者看看呼叫性能,就需要配置OpenFeign的日志,把OpenFeign的呼叫日志清晰的列印出來,方便我們開發,
Feign日志級別:
NONE,無記錄(DEFAULT),
BASIC,只記錄請求方法和URL以及回應狀態代碼和執行時間,
HEADERS,記錄基本資訊以及請求和回應標頭,
FULL,記錄請求和回應的頭檔案,正文和元資料
1、全域配置日志
OpenFeignConfig.class
/**
* 全域配置:OpenFeign的全域日志配置
* 區域配置:不加@Configuration注釋
* @author DT
* @date 2021/8/9 22:00
*/
@Configuration
public class OpenFeignConfig {
@Bean
public Logger.Level feignLoggerLevel(){
// 輸出日志級別FULL
return Logger.Level.FULL;
}
}
SpringBoot的日志級別默認為info,大于full,導致feign的日志配置不會輸出,所以加以下配置:
#SpringBoot的日志級別默認為info,大于full,導致feign的日志配置不會輸出,所以加以下配置
logging:
level:
com.dt.springcloud.openfeign: debug

輸出列印:

2、針對單個服務配置日志

使用configuration = OpenFeignConfig.class

當然我們也可以通過組態檔的方式來配置.
3、通過組態檔配置日志
1、全域配置
針對所有服務配置:
# SpringBoot的日志級別默認為info,大于full,導致feign的日志配置不會輸出,所以加以下配置
logging:
level:
com.dt.springcloud.openfeign: debug
# feign日志全域配置
feign:
client:
config:
default:
loggerLevel: BASIC

2、針對某個服務單獨配置
當然你也可以針對某個服務進行配置單獨的日志,將呼叫的微服務名稱改成default就配置成全域的了:
# feign針對某個服務配置日志
feign:
client:
config:
#想要呼叫的微服務名稱
dt-stock-service:
loggerLevel: BASIC

三、OpenFeign自定義攔截器
OpenFeign攔截器,無非就是和我們SpringMVC中的攔截器一樣,每次feign發起http呼叫之前,會去執行攔截器中的邏輯,比如統一添加header頭資訊,對body體中的資訊做修改或替換,feign提供了 feign.RequestInterceptor 介面,只需實作該介面,實作對應方法,并將實作類通過 @Configuration交給spring容器管理,即可加上我們自己的通用處理邏輯,
1、全域配置
@CommonsLog
@Configuration
public class CustomFeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("token","ABC123456");
byte[] body = requestTemplate.body();
String url = requestTemplate.url();
String method = requestTemplate.method();
Map<String, Collection<String>> map = requestTemplate.headers();
log.info("OpenFeign攔截器啟動......");
log.info("body->>>"+(body == null ? null : body.length));
log.info("url->>>"+url);
log.info("method->>>"+method);
log.info("header->>>"+map.get("token"));
}
}

查看列印結果:

如果還需要做其他處理,可以對RequestTemplate做相應處理來實作,比如令牌的驗證,重繪,鑒權等等,
2、針對某個服務單獨配置
除了上面的第一種全域配置方式以外,我們也可以在組態檔中,單獨針對某個被呼叫的服務進行配置,和我們上面的日志配置方式一樣,

# feign針對某個服務配置
feign:
client:
config:
#想要呼叫的微服務名稱
dt-stock-service:
connectTimeout: 5000 # 連接超時時間
readTimeout: 5000 # 讀取超時時間
loggerLevel: BASIC
requestInterceptors: # 配置攔截器,相當于代碼配置方式中的RequestInterceptor
- com.dt.springcloud.interceptor.CustomFeignInterceptor
dt-stock-service 想要呼叫的服務名稱,
總結
沒有誰的幸運,是憑空而來,只有當你足夠努力,你才會足夠幸運,這世界不會辜負每一份努力和堅持,時光不會怠慢執著而勇敢的每一個人
本篇文章結束了,后面我們再繼續深入研究微服務其他的組件的使用以及原理剖析,創作不易,喜歡的請關注小編CSDN:https://blog.csdn.net/qq_41107231 以及掘金:https://juejin.cn/user/3940246036699848
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293326.html
標籤:其他
上一篇:docker鏡像和容器的匯入匯出
