Feign攔截器應用 (F版)


Spring Cloud 為開發者提供了在分布式系統中的一些常用的組件(例如配置管理,服務發現,斷路器,智能路由,微代理,控制總線,一次性令牌,全局鎖定,決策競選,分布式會話集群狀態)。使用Spring Cloud開發人員可以快速地完成實現這些模式的服務和應用程序。它們在任何分布式環境中都能很好地工作

Feign

使用Spring Cloud時,通常會用 Feign 來調用遠程服務,比如遠程服務的權限驗證,需要在 header 中傳遞 token之類的。在方法中顯示傳遞又過於麻煩了,這時候就可以考慮使用 Feign 提供的RequestInterceptor 接口,只要實現了該接口,那么Feign每次做遠程調用之前都可以被它攔截下來在進行包裝

Try

准備三個工程,分別是 eureka-serverorder-serverproduct-server

Eureka Server

詳情參考第一章,或從文末的 GITHUB 鏈接獲取對應篇幅的完整代碼

Product Server

一個普通的 Eureka Client 即可,詳情參考上一章,或從文末的 GITHUB 鏈接獲取對應篇幅的完整代碼

唯一變動

為了體現 RequestInterceptor 生效,將返回的消息做了下調整

1
2
3
4
@GetMapping("/products/{id}")
public String query(@PathVariable Long id, @RequestHeader String token) {
return id + ":Spring Boot... token = " + token;
}

Order Server

在上一章的基礎之上做了擴展,創建一個 FeignInterceptor 實現 RequestInterceptor 的接口,這樣就可以將需要傳遞的內容設置到 RequestTemplate 中,然后在服務的另外一端就可以通過 request.getHeader("key") 的方式進行獲取了

1
2
3
4
5
6
7
8
9
@Configuration
public class FeignInterceptor implements RequestInterceptor {

@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("token", "10086");
}

}

流程圖

畫圖工具:https://www.processon.com/

流程圖流程圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM