当前位置: 首页 > news >正文

【源码】Spring Cloud Gateway 是在哪里匹配路由的?

我们知道,经过网关的业务请求会被路由到后端真实的业务服务上去,假如我们使用的是Spring Cloud Gateway,那么你知道Spring Cloud Gateway是在哪一步去匹配路由的吗?

源码之下无秘密,让我们一起从源码中寻找答案。

入口

Spring Cloud Gateway 的入口为 DispatcherHandlerhandle 方法,其中主要逻辑有获取Hander 和 执行Handler

获取Handler

获取 Handler 的时候,handlerMappings 中包含有一个 RoutePredicateHandlerMapping 实例,其获取 Handler 的实现最终会调用到 getHandlerInternal 方法。

org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping

getHandlerInternal 方法会调用了 lookupRoute 方法去获取路由。

其中:

  • 第一步是从缓存中获取路由列表,源码解析见:
  • 第二步是调用每个路由的断言去匹配当前请求,匹配到就直接返回,忽略后续所有其他路由。

获取到路由后将路由信息设置到 exchangegatewayRoute 属性上,然后返回 Handler

其中RoutePredicateHandlerMapping 实例是在 GatewayAutoConfiguration 中配置好的。

org.springframework.cloud.gateway.config.GatewayAutoConfiguration

public class GatewayAutoConfiguration {// ...@Beanpublic RouteLocator routeDefinitionRouteLocator(GatewayProperties properties,List<GatewayFilterFactory> gatewayFilters,List<RoutePredicateFactory> predicates,RouteDefinitionLocator routeDefinitionLocator,ConfigurationService configurationService) {return new RouteDefinitionRouteLocator(routeDefinitionLocator, predicates,gatewayFilters, properties, configurationService);}@Bean@Primary@ConditionalOnMissingBean(name = "cachedCompositeRouteLocator")// TODO: property to disable composite?public RouteLocator cachedCompositeRouteLocator(List<RouteLocator> routeLocators) {return new CachingRouteLocator(new CompositeRouteLocator(Flux.fromIterable(routeLocators)));}@Beanpublic RoutePredicateHandlerMapping routePredicateHandlerMapping(FilteringWebHandler webHandler, RouteLocator routeLocator,GlobalCorsProperties globalCorsProperties, Environment environment) {return new RoutePredicateHandlerMapping(webHandler, routeLocator,globalCorsProperties, environment);}// ...
}}

结论

综上,Spring Cloud Gateway 的路由匹配是在获取 Handler 的过程中,在 RoutePredicateHandlerMapping 中实现的,具体实现方法为 lookupRoute。最后将匹配到的路由设置到 exchangegatewayRoute 属性上,供后续获取并使用。

相关文章:

【源码】Spring Cloud Gateway 是在哪里匹配路由的?

我们知道&#xff0c;经过网关的业务请求会被路由到后端真实的业务服务上去&#xff0c;假如我们使用的是Spring Cloud Gateway&#xff0c;那么你知道Spring Cloud Gateway是在哪一步去匹配路由的吗&#xff1f; 源码之下无秘密&#xff0c;让我们一起从源码中寻找答案。 入…...

BAT批处理基本命令

什么是 BAT 批处理脚本语言&#xff1f; BAT 批处理脚本语言是 Windows 系统自带的一种脚本语言&#xff0c;主要用于批量处理文件、目录、注册表、系统设置等任务。使用 BAT 批处理脚本语言可以节省大量手动操作的时间和精力。 如何编写 BAT 批处理脚本&#xff1f; 使用记事本…...

Python数组仿射变换

文章目录 仿射变换坐标变换的逻辑scipy实现 仿射变换 前面提到的平移、旋转以及缩放&#xff0c;都可以通过一个变换矩阵来实现&#xff0c;以二维空间中的变换矩阵为例&#xff0c;记点的坐标向量为 ( x , y , 1 ) (x,y,1) (x,y,1)&#xff0c;则平移矩阵可表示为 [ 1 0 T x …...

“==“和equals方法究竟有什么区别?

操作符专门用来比较两个变量的值是否相等&#xff0c;也就是用于比较变量所对应的内存中所存储的数值是否相同&#xff0c;要比较两个基本类型的数据或两个引用变量是否相等&#xff0c;只能用操作符。 如果一个变量指向的数据是对象类型的&#xff0c;那么&#xff0c;这时候…...

蓝桥杯15单片机--超声波模块

目录 一、超声波工作原理 二、超声波电路图 三、程序设计 1-设计思路 2-具体实现 四、程序源码 一、超声波工作原理 超声波时间差测距原理超声波发射器向某一方向发射超声波&#xff0c;在发射时刻的同时开始计时&#xff0c;超声波在空气中传播&#xff0c;途中碰到障碍…...

【学习笔记】ARC159

D - LIS 2 因为没有让你求方案数&#xff0c;所以还是比较好做的。 如果每一个连续段都退化成一个点&#xff0c;那么答案就是直接求 L I S LIS LIS。 否则&#xff0c;假设我们选了一些连续段把它们拼起来形成答案&#xff0c;显然我们有 r i 1 ≥ l i r_{i1}\ge l_i ri1​…...

2023/4/16总结

图的存储 链式前向星 链式前向星和邻接表很相似&#xff0c;只是存储方式变成了数组。 链式前向星一般要用到一个结构体数组和一个一维数组,结构体数组edges中包括三个变量。结构体数组的大小一般由边的大小决定。 edges数组中的to代表的是某条边的终点v。w代表的是这条边的…...

【剑指offer】常用的数据增强的方法

系列文章目录 BN层详解 梯度消失和梯度爆炸 交叉熵损失函数 反向传播 1*1卷积的作用 文章目录 系列文章目录常用的数据增强的方法示例代码 常用的数据增强的方法 数据增强是指通过对原始数据进行一系列变换来生成更多的训练数据&#xff0c;从而提高模型的泛化能力。常用的数…...

/lib/lsb/init-functions文件解析

零、背景 在玩AppArmor的时候涉及到了/etc/init.d/apparmor&#xff08;无论是sudo /etc/init.d/apparmor start还是sudo systemctl start apparmor.service&#xff09;&#xff0c;而这个文件又涉及到了另一个文件、也就是本文的主角&#xff1a;/lib/lsb/init-functions。 …...

【ChatGPT】ChatGPT-5 强到什么地步?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 ChatGPT-5 强到什么地步&#xff1f; 技术 深度学习模型的升级 更好的预测能力 自适应学习能力 特点 语言理解能力更强 自我修正和优化 更广泛的应用领域 应用 对话系统 智能写作…...

[ARM+Linux] 基于全志h616外设开发笔记

修改用户密码 配置网络 nmcli dev wifi 命令扫描周围WIFI热点 nmcli dev wifi connect xxx password xxx 命令连接WiFi 查看ip地址的指令&#xff1a; ifconfig ip addr show wlan0 SSH登录 这是企业开发调试必用方式&#xff0c;比串口来说不用接线&#xff0c;前提是接入网络…...

如何实现24小时客户服务

许多企业都有着这样的愿望&#xff1a;在不增加客服人员的同时能实现24小时客户服务。 那么有没有什么方法可以实现这一想法呢&#xff1f;在想解决方案之前我们可以先来谈谈客服的作用。 客服的作用主要为以下2点&#xff1a; 帮助用户更快地了解产品&#xff08;减轻产品的…...

查询数据库空间(mysql和oracle)

Mysql版 1、查看所有数据库容量大小 -- 查看所有数据库容量大小 SELECTtable_schema AS 数据库,sum( table_rows ) AS 记录数,sum(TRUNCATE ( data_length / 1024 / 1024, 2 )) AS 数据容量(MB),sum(TRUNCATE ( index_length / 1024 / 1024, 2 )) AS 索引容量(MB) FROMinfor…...

为什么 SQLite 一定要用 C 语言来开发?

SQLite 是一种专门为在 Unix 和类 Unix 操作系统上运行的 Linux 服务器应用程序而设计的数据库管理系统&#xff0c;是一种轻量级的关系型数据库管理系统&#xff0c;它适用于许多嵌入式设备和物联网设备。它使用 C 语言编写&#xff0c;并且是一个开源项目。 简单易用&#x…...

TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11

原文&#xff1a;Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的…...

你的GPT跟ChatGPT可能只差了一个DPU

“人类永远不会嫌网络太快&#xff0c;就像永远不会嫌高铁太快&#xff0c;你只会嫌它慢&#xff0c;希望它更快些。” 一个月内&#xff0c;百度、阿里、腾讯、商汤、讯飞、360等国内大厂扎堆发布“中国版 GPT ”&#xff0c;这家的名字还没记清楚&#xff0c;另一家的又蹦了出…...

springboot服务端接口外网远程调试,并实现HTTP服务监听 - 内网穿透

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

NumPy的应用-1

准备工作 在Python中使用NumPy时&#xff0c;需要先安装NumPy。可以使用以下命令来安装NumPy&#xff1a; pip install numpy安装完成后&#xff0c;在Python中引入NumPy&#xff1a; import numpy as np安装完成并引入NumPy后&#xff0c;我们可以开始使用NumPy进行数据分析…...

k8s的yaml文件中kind类型详解

在Kubernetes&#xff08;k8s&#xff09;的YAML语法中&#xff0c;kind是一种重要的关键字&#xff0c;它用于指定Kubernetes资源的类型。根据Kubernetes官方文档&#xff0c;以下是kind可能的取值&#xff1a; Deployment&#xff1a;用于定义应用程序的声明式更新。Statefu…...

第三天:C语言控制结构

目录 1. 条件语句 2. 循环语句 3. 实例&#xff1a;计算阶乘 在前两天的学习中&#xff0c;您已经掌握了C语言的基本知识。今天&#xff0c;我们将学习C语言的控制结构&#xff0c;包括条件语句和循环语句。通过控制结构&#xff0c;您可以实现程序的分支和循环&#xff0c;…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql

安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了&#xff0c;系统很多命…...

理想汽车5月交付40856辆,同比增长16.7%

6月1日&#xff0c;理想汽车官方宣布&#xff0c;5月交付新车40856辆&#xff0c;同比增长16.7%。截至2025年5月31日&#xff0c;理想汽车历史累计交付量为1301531辆。 官方表示&#xff0c;理想L系列智能焕新版在5月正式发布&#xff0c;全系产品力有显著的提升&#xff0c;每…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...