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

一、概述

本文主要对 路由定义定位器 RouteDefinitionLocator 做整体的认识

在 《Spring-Cloud-Gateway 源码解析 —— 网关初始化》 中,我们看到路由相关的组件 RouteDefinitionLocator / RouteLocator 的初始化。涉及到的类比较多,我们用下图重新梳理下 :

996f8490713ec09e7c6d37a451a8c5c6.png

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 属性,顺序。当请求匹配到多个路由时,使用顺序的。

10cb8ff896c2342066b3553ff27e1b62.png

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 + "'" + 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK 8流和分组

我在JDK 8中的Stream-Powered Collections Functionality中介绍了将JDK 8的Streams与Java集合一起使用的强大功能。 我没有在那篇文章中讨论groupingBy Collector 减少操作的使用&#xff0c;因此在这篇文章中解决了分组问题。 这篇博文中的示例将演示如何将集合支持的流与gro…

ERP开发中应用字符串解析实现界面翻译智能化

ERP中要实现界面多语言的功能&#xff0c;则要对各种情况的字符串进行处理并作出翻译。有些字符串的翻译是有规律可行的&#xff0c;遵循相应的模板模式&#xff0c;解析字符串&#xff0c;可以实现机器翻译的效果。 请看帐套数据库表的设计ADCOMP CREATE TABLE dbo.ADCOMP(REC…

参数详解 复制进程_如何优化PostgreSQL逻辑复制

How to Optimize PostgreSQL Logical Replication逻辑复制( Logical Replication )或 Pglogical 是表级别的复制。两者都是基于 WAL 的复制机制&#xff0c;允许在两个实例之间复制指定表的WAL 。这两个看起来让人迷惑&#xff0c;到底有什么区别呢&#xff1f; Logical Replic…

我发现我的Java重拍了!

在一月份&#xff0c;我写了一篇文章&#xff0c;介绍了一些我希望在Java语言中看到的变化&#xff0c;这些变化会让我更加喜欢它&#xff08;并使它变得更现代&#xff09;。 很多人建议使用许多JVM语言&#xff0c;但我基本上不予使用&#xff0c;因为这不是我想要的。 我希望…

Android Studio使用说明

声明: 本博客文章原创类别的均为个人原创&#xff0c;版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。 凌晨的Google I/O大会上&#xff0c;宣布了Android Studio&#xff0c;引起了现场开发者的一片欢呼。那么&#x…

有些窗口底部被任务栏挡住了_开始使用 Tint2 吧,一款 Linux 中的开源任务栏

Tint2 是我们在开源工具系列中的第 14 个工具&#xff0c;它将在 2019 年提高你的工作效率&#xff0c;能在任何窗口管理器中提供一致的用户体验。-- Kevin Sonney每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心&#xff0c;渴望开启新的一年&#xff0c;当然&#xff…

从jHiccup开始

写完“如何在生产中检测和诊断慢速代码”一文后&#xff0c;我受到读者的鼓励&#xff0c;尝试从Azul系统尝试jHiccup 。 去年&#xff0c;我参加了jHiccup的创建者Gil Tene的演讲&#xff0c;探讨了测量延迟的正确方法&#xff0c;其中&#xff0c;他向我们介绍了jHiccup。 它…

nullnull使用PL/SQL获取创建用户的语句

在写这篇文章之前&#xff0c;xxx已经写过了几篇关于改nullnull主题的文章,想要了解的朋友可以去翻一下之前的文章 Create procedure: create or replace procedure get_case_sqls_for_ddls_ver1 ascursor get_username isselect username from dba_users;beginfor l_user in g…

axios发送post数据后台收不到_使用axios post 提交数据,后台获取不到

https://www.cnblogs.com/yiyi17/p/9409249.html(copyhttps://www.cnblogs.com/loveyaxin/p/8385694.html(copy问题场景场景很简单&#xff0c;就是一个正常 axios post 请求&#xff1a;axios({headers: {deviceCode: A95ZEF1-47B5-AC90BF3},method: post,url: /api/lockServe…

在JDK 8中连接字符串

JDK 8引入了语言功能&#xff0c;例如lambda表达式 &#xff0c; 流 &#xff0c;甚至是新的Date / Time API &#xff0c;这些都会改变我们编写Java应用程序的方式。 但是&#xff0c;还有一些新的API和功能可能不太“改变游戏规则”&#xff0c;但仍为Java编程语言带来了更大…

华为内部面试题库---(6)

1.在SMP体系结构中&#xff0c;中断亲和性是指将一个或者多个中断绑定到特定CPU core上运行&#xff0c;下列说法错误的是&#xff1a;A.每个硬件设备都会在/proc/irq下有个中断号命令的目录来标志中断亲和性B.IRQ#目录下smp_affinity文件&#xff0c;通过设置CPU位掩码&#x…

基元需要走吗?

我目前正在使用JSF作为视图技术&#xff0c;使用JPA作为持久层的企业应用程序。 它可能是支持bean或服务方法中的某种东西&#xff0c;但令我震惊&#xff1a;是否有充分的理由在企业应用程序中使用原语&#xff1f; 当我开始围绕J2SE 1.2使用Java进行编程&#xff08;或者是J…

输入参数_太实用!输入参数1秒算出功率,这款计算工具又快又准

随着互联网红利的不断加深&#xff0c;到了后期&#xff0c;不断地各种工具开始涌现&#xff0c;方便了很多用户&#xff0c;填补了市场上的很多空白&#xff0c;有生活娱乐类、提高效率类、垂直专业类、系统工具类等等。工业行业作为各行各业的大头&#xff0c;机械化、智能化…

功能工厂模式

您是否需要一种非常快速的方法来制作Factory对象&#xff1f; 然后&#xff0c;您需要lambda或其他函数传递&#xff01; 它不仅快速&#xff0c;而且非常简单。 我敢打赌&#xff0c;如果您对Lambdas相当满意&#xff0c;那么您只需阅读标题就可以做到这一点。 如果您是其中之…

指向二维数组的指针测试

定义a为二维数组后&#xff0c;有三种成份&#xff1a;数组本身、3个一维数组&#xff08;a的每一行对应一个一维数组&#xff09;、12个数组元素&#xff0c; 由此就有三种指针及对应的指针变量&#xff0c; &a和int &#xff08;*p1&#xff09;&#xff3b;3&#xff3d…

python视频流传输_基于OpenCV的网络实时视频流传输的实现

很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头。但是有时&#xff0c;大家又希望能够随时随地观看视频直播。大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视)&#xff0c;因为它们具有更高的分辨率并降低了布线成本。在本文中&#xff0c;…

如何编写NetBeans插件

是否想在NetBeans IDE中添加功能或自动执行某些操作&#xff1f; 跟随我们编写您的第一个NetBeans插件。 让我们超越简单的工具栏示例 &#xff0c;创建一个可以自动更新的插件。 该代码基于NetBeans的WakaTime插件 。 我们的示例插件将仅打印Hello World语句&#xff0c;并在…

单机最大tcp连接数

单机最大tcp连接数 网络编程 在tcp应用中&#xff0c;server事先在某个固定端口监听&#xff0c;client主动发起连接&#xff0c;经过三路握手后建立tcp连接。那么对单机&#xff0c;其最大并发tcp连接数是多少&#xff1f; 如何标识一个TCP连接 在确定最大连接数之前&#xf…

用了fastapi还需要nginx_nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。...

nginx 与 fastdfs 的配置过程&#xff0c;已经越过了许多坑&#xff0c;我跪着进入了欢迎页面。。。上面的是 fastdfs 与 nginx 的官网&#xff0c;我从这里面跌跌撞撞的走出来了&#xff0c;下面是我总结出来的一条平坦的路&#xff0c;小伙伴们可以参考参考。我下面的攻略其实…

Spring Batch教程–最终指南

这是Spring批处理教程&#xff0c;它是Spring框架的一部分。 Spring Batch提供了可重用的功能&#xff0c;这些功能对于处理大量记录至关重要&#xff0c;包括日志记录/跟踪&#xff0c;事务管理&#xff0c;作业处理统计信息&#xff0c;作业重新启动&#xff0c;跳过和资源管…