Spring Cloud Gateway的路由斷言(Predicate)-Part 2

Spring Cloud Gateway的路由匹配的功能是以 Spring WebFlux中的Handler Mapping為基礎實現的。

Spring Cloud Gateway 創建 Route 對象時, 使用 RoutePredicateFactory 創建 Predicate 對象,Predicate 對象可以賦值給 Route。 Spring Cloud Gateway 包含許多內置的Route Predicate Factories。所有這些斷言都匹配HTTP請求的不同屬性。多種斷言工廠可以組合,並通過邏輯and。

路由選擇是通過Predicate函數式接口進行判斷當前路由是否滿足給定條件。匹配成功則進行轉發,否則處理失敗。


路由斷言工廠 RoutePredicateFactory

路由斷言工廠 RoutePredicateFactory 包含的主要實現類如圖所示,可以看到該接口有多個實現類。

Spring Cloud Gateway的路由斷言(Predicate)-Part 2

抽象類 AbstractRoutePredicateFactory 實現了路由斷言工廠,但是沒有實際的方法,具體的實現類都是繼承自抽象類 AbstractRoutePredicateFactory 包括 Datetime、 請求的遠端地址、 路由權重、 請求頭、 Host 地址、 請求方法、 請求路徑和請求參數等類型的路由斷言。


Spring Cloud Gateway的路由斷言(Predicate)-Part 2


下面以Query路由斷言工廠(QueryRouteRedicateFactory)為示例,演示Spring Cloud Gateway路由斷言的具體使用。


1. 引用gateway的jar包依賴。

<dependency>

<groupid>org.springframework.cloud/<groupid>

<artifactid>spring-cloud-starter-gateway/<artifactid>


2. 使用Java代碼自定義RouteLocator的配置。

在啟動類Application配置網關路由,如下所示,定義bean對象。

Spring Cloud Gateway的路由斷言(Predicate)-Part 2


上述代碼,也可以使用屬性文件的配置方式,如在application.yml 中配置(二選一即可)。

spring:

cloud:

gateway:

routes:

- id: query_route

uri: http://baidu.com

predicates:

- Query=name, rickie


3. 啟動演示項目

演示項目中的application.yml 配置參數如下。

Spring Cloud Gateway的路由斷言(Predicate)-Part 2

訪問 http://localhost:8080/?name=rickie,就會成功轉發到對應的uri,因為斷言匹配成功。



分享到:


相關文章: