日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gateway 过滤器执行顺序_Gateway网关源码解析—路由(1.1)之RouteDefinitionLocator一览...

發布時間:2023/12/2 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gateway 过滤器执行顺序_Gateway网关源码解析—路由(1.1)之RouteDefinitionLocator一览... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

本文主要對 路由定義定位器 RouteDefinitionLocator 做整體的認識

在 《Spring-Cloud-Gateway 源碼解析 —— 網關初始化》 中,我們看到路由相關的組件 RouteDefinitionLocator / RouteLocator 的初始化。涉及到的類比較多,我們用下圖重新梳理下 :

RouteDefinitionLocator 負責讀取路由配置( org.springframework.cloud.gateway.route.RouteDefinition ) 。從上圖中我們可以看到,RouteDefinitionLocator 接口有四種實現 :

1、PropertiesRouteDefinitionLocator ,從配置文件( 例如,YML / Properties 等 ) 讀取。在 《Spring-Cloud-Gateway 源碼解析 —— 路由(1.2)之 PropertiesRouteDefinitionLocator 配置文件》「2.PropertiesRouteDefinitionLocator」 詳細解析。

2、RouteDefinitionRepository ,從存儲器( 例如,內存 / Redis / MySQL 等 )讀取。在 《Spring-Cloud-Gateway 源碼解析 —— 路由(1.3)之 RouteDefinitionRepository 存儲器》 詳細解析。

3、DiscoveryClientRouteDefinitionLocator ,從注冊中心( 例如,Eureka / Consul / Zookeeper / Etcd 等 )讀取。在 《Spring-Cloud-Gateway 源碼解析 —— 路由(1.4)之 DiscoveryClientRouteDefinitionLocator 注冊中心》 詳細解析。

4、CompositeRouteDefinitionLocator ,組合多種 RouteDefinitionLocator 的實現,為 RouteDefinitionRouteLocator 提供統一入口。在 本文 詳細解析。

另外,CachingRouteDefinitionLocator 也是 RouteDefinitionLocator 的實現類,已經被 CachingRouteLocator 取代。

RouteLocator 可以直接自定義路由( org.springframework.cloud.gateway.route.Route ) ,也可以通過 RouteDefinitionRouteLocator 獲取 RouteDefinition ,并轉換成 Route 。

重要,對于上層調用者 RoutePredicateHandlerMapping ,使用的是 RouteLocator 和 Route 。而 RouteDefinitionLocator 和 RouteDefinition 用于通過配置定義路由那么自定義 RouteLocator 呢?通過代碼定義路由

二、 RouteDefinition

org.springframework.cloud.gateway.route.RouteDefinition ,路由定義。代碼如下 :

@Validatedpublic class RouteDefinition { @NotEmpty private String id = UUID.randomUUID().toString(); /** * 謂語定義數組 */ @NotEmpty @Valid private List predicates = new ArrayList<>(); /** * 過濾器定義數組 */ @Valid private List filters = new ArrayList<>(); /** * 路由向的 URI */ @NotNull private URI uri; /** * 順序 */ private int order = 0;}

id 屬性,ID 編號,唯一

predicates 屬性,謂語定義數組。請求通過 predicates 判斷是否匹配。在 Route 里,PredicateDefinition 轉換成 Predicate 。

filters 屬性,過濾器定義數組。在 Route 里,FilterDefinition 轉換成 GatewayFilter 。

uri 屬性,路由向的 URI 。

order 屬性,順序。當請求匹配到多個路由時,使用順序的。

RouteDefinition 提供 text 字符串創建對象,代碼如下 :

/** * 根據 text 創建 RouteDefinition * * @param text 格式 ${id}=${uri},${predicates[0]},${predicates[1]}...${predicates[n]} * 例如 route001=http://127.0.0.1,Host=**.addrequestparameter.org,Path=/get */public RouteDefinition(String text) { int eqIdx = text.indexOf("="); if (eqIdx <= 0) { throw new ValidationException("Unable to parse RouteDefinition text '" + text + "'" +

總結

以上是生活随笔為你收集整理的gateway 过滤器执行顺序_Gateway网关源码解析—路由(1.1)之RouteDefinitionLocator一览...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。