gateway 过滤器执行顺序_Gateway网关源码解析—路由(1.1)之RouteDefinitionLocator一览...
一、概述
本文主要對 路由定義定位器 RouteDefinitionLocator 做整體的認(rèn)識。
在 《Spring-Cloud-Gateway 源碼解析 —— 網(wǎng)關(guān)初始化》 中,我們看到路由相關(guān)的組件 RouteDefinitionLocator / RouteLocator 的初始化。涉及到的類比較多,我們用下圖重新梳理下 :
RouteDefinitionLocator 負(fù)責(zé)讀取路由配置( org.springframework.cloud.gateway.route.RouteDefinition ) 。從上圖中我們可以看到,RouteDefinitionLocator 接口有四種實現(xiàn) :
1、PropertiesRouteDefinitionLocator ,從配置文件( 例如,YML / Properties 等 ) 讀取。在 《Spring-Cloud-Gateway 源碼解析 —— 路由(1.2)之 PropertiesRouteDefinitionLocator 配置文件》「2.PropertiesRouteDefinitionLocator」 詳細(xì)解析。
2、RouteDefinitionRepository ,從存儲器( 例如,內(nèi)存 / Redis / MySQL 等 )讀取。在 《Spring-Cloud-Gateway 源碼解析 —— 路由(1.3)之 RouteDefinitionRepository 存儲器》 詳細(xì)解析。
3、DiscoveryClientRouteDefinitionLocator ,從注冊中心( 例如,Eureka / Consul / Zookeeper / Etcd 等 )讀取。在 《Spring-Cloud-Gateway 源碼解析 —— 路由(1.4)之 DiscoveryClientRouteDefinitionLocator 注冊中心》 詳細(xì)解析。
4、CompositeRouteDefinitionLocator ,組合多種 RouteDefinitionLocator 的實現(xiàn),為 RouteDefinitionRouteLocator 提供統(tǒng)一入口。在 本文 詳細(xì)解析。
另外,CachingRouteDefinitionLocator 也是 RouteDefinitionLocator 的實現(xiàn)類,已經(jīng)被 CachingRouteLocator 取代。
RouteLocator 可以直接自定義路由( org.springframework.cloud.gateway.route.Route ) ,也可以通過 RouteDefinitionRouteLocator 獲取 RouteDefinition ,并轉(zhuǎn)換成 Route 。
重要,對于上層調(diào)用者 RoutePredicateHandlerMapping ,使用的是 RouteLocator 和 Route 。而 RouteDefinitionLocator 和 RouteDefinition 用于通過配置定義路由。那么自定義 RouteLocator 呢?通過代碼定義路由。
二、 RouteDefinition
org.springframework.cloud.gateway.route.RouteDefinition ,路由定義。代碼如下 :
@Validatedpublic class RouteDefinition { @NotEmpty private String id = UUID.randomUUID().toString(); /** * 謂語定義數(shù)組 */ @NotEmpty @Valid private List predicates = new ArrayList<>(); /** * 過濾器定義數(shù)組 */ @Valid private List filters = new ArrayList<>(); /** * 路由向的 URI */ @NotNull private URI uri; /** * 順序 */ private int order = 0;}id 屬性,ID 編號,唯一。
predicates 屬性,謂語定義數(shù)組。請求通過 predicates 判斷是否匹配。在 Route 里,PredicateDefinition 轉(zhuǎn)換成 Predicate 。
filters 屬性,過濾器定義數(shù)組。在 Route 里,FilterDefinition 轉(zhuǎn)換成 GatewayFilter 。
uri 屬性,路由向的 URI 。
order 屬性,順序。當(dāng)請求匹配到多個路由時,使用順序小的。
RouteDefinition 提供 text 字符串創(chuàng)建對象,代碼如下 :
/** * 根據(jù) text 創(chuàng)建 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 + "'" +總結(jié)
以上是生活随笔為你收集整理的gateway 过滤器执行顺序_Gateway网关源码解析—路由(1.1)之RouteDefinitionLocator一览...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kotlin 添加第一个 集合_Flut
- 下一篇: 参数详解 复制进程_如何优化Postgr