Gateway核心架构

news2025/1/12 12:15:30

1 Gateway核心架构

1.1 基本概念

        路由(Route) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息:

  • id,路由标识符,区别于其他 Route。
  • uri,路由指向的目的地 uri,即客户端请求最终被转发到的微服务。
  • order,用于多个 Route 之间的排序,数值越小排序越靠前,匹配优先级越高。
  • predicate,断言的作用是进行条件判断,只有断言都返回真,才会真正的执行路由。
  • filter,过滤器用于修改请求和响应信息。

1.2 执行流程

执行流程大体如下:
(1) Gateway Client向Gateway Server发送请求
(2) 请求首先会被HttpWebHandlerAdapter进行提取组装成网关上下文
(3)然后网关的上下文会传递到DispatcherHandler,它负责将请求分发RoutePredicateHandlerMapping
(4) RoutePredicateHandlerMapping负责路由查找,并根据路由断言判断路由是否可用
(5)如果过断言成功,由FilteringWebHandler创建过滤器链并调用

(6)请求会一次经过PreFilter--微服务--PostFilter的方法,最终返回响应

2 断言

Predicate(断言, 谓词) 用于进行条件判断,只有断言都返回真,才会真正的执行路由。
断言就是说: 在 什么条件下 才能进行路由转发

2.1 内置路由断言工厂

        SpringCloud Gateway包括许多内置的断言工厂,所有这些断言都与HTTP请求的不同属性匹配。具体如下:

  • 基于Datetime类型的断言工厂

        此类型的断言根据时间做判断,主要有三个:
        AfterRoutePredicateFactory: 接收一个日期参数,判断请求日期是否晚于指定日期
        BeforeRoutePredicateFactory: 接收一个日期参数,判断请求日期是否早于指定日期
        BetweenRoutePredicateFactory: 接收两个日期参数,判断请求日期是否在指定时间段内

-After=2019-12-31T23:59:59.789+08:00[Asia/Shanghai]

  • 基于远程地址的断言工厂 RemoteAddrRoutePredicateFactory:接收一个IP地址段,判断请求主机地址是否在地址段中

-RemoteAddr=192.168.1.1/24

  • 基于Cookie的断言工厂
    CookieRoutePredicateFactory:接收两个参数,cookie 名字和一个正则表达式。 判断请求
    cookie是否具有给定名称且值与正则表达式匹配。
-Cookie=chocolate, ch.
  • 基于Header的断言工厂
    HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。 判断请求Header是否具有给定名称且值与正则表达式匹配。
-Header=X-Request-Id, \d+
  • 基于Host的断言工厂
    HostRoutePredicateFactory:接收一个参数,主机名模式。判断请求的Host是否满足匹配规则。
-Host=**.testhost.org
  • 基于Method请求方法的断言工厂
    MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配。
-Method=GET
  • 基于Path请求路径的断言工厂
-Path=/foo/{segment}


PathRoutePredicateFactory:接收一个参数,判断请求的URI部分是否满足路径规则。

  • 基于Query请求参数的断言工厂
    QueryRoutePredicateFactory :接收两个参数,请求param和正则表达式, 判断请求参数是否具有给定名称且值与正则表达式匹配。
-Query=baz, ba.
  • 基于路由权重的断言工厂
    WeightRoutePredicateFactory:接收一个[组名,权重], 然后对于同一个组内的路由按照权重转发
routes:
-id: weight_route1 uri: host1 predicates:
-Path=/product/**
-Weight=group3, 1
-id: weight_route2 uri: host2 predicates:
-Path=/product/**
-Weight= group3, 9

内置路由断言工厂的使用
接下来我们验证几个内置断言的使用:

server:
port: 7000
spring:
application:
 name: api-gateway
cloud:
 nacos:
  discovery:
   server-addr: 127.0.0.1:8848
 gateway:
  discovery:
   locator:
    enabled: true
  routes:
   - id: product_route
    uri: lb://service-product
    predicates:
     - Path=/product-serv/**
     - Before=2019-11-28T00:00:00.000+08:00 #限制请求时间在2019-11-28之前
     - Method=POST #限制请求方式为POST
    filters:
     - StripPrefix=1

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

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

相关文章

EasyRecovery易恢复2023最新免费的电脑数据恢复软件

EasyRecovery是一款非常专业的硬盘数据恢复工具,EasyRecovery拥有磁盘诊断、数据恢复、文件修复、E-mail 修复等功能。有了EasyRecovery,你可以把误删,被破坏的文件,格式化的磁盘轻轻松松的找回来。小伙伴们可以使用EasyRecovery恢…

AWS EC2入门指南中创建和配置云虚拟机实例的基本步骤

文章目录 创建 AWS 账户登录 AWS 控制台导航到 EC2 控制台启动 EC2 实例选择 AMI(Amazon Machine Image)选择实例类型配置实例添加存储审查和启动实例创建密钥对 连接到 EC2 实例管理 EC2 实例了解定价和计费结论 🎈个人主页:程序…

预售33.8万元起:全新蔚来EC6开始接受预订,四驱标配 + 电动尾翼

蔚来汽车近日宣布,全新款EC6已经开始接受预订。从9月15日开始,广大消费者可以参与试驾活动,亲身体验这款定位为智能电动轿跑SUV的新车带来的魅力。据悉,这款车型将于9月16日开始交付,预售价格为33.8万元起,…

寻找联想集团的AI预期差

股票市场中最重要的因素是什么?不是技术分析,也不是基本面分析,而是预期差。 当下的市场,是复杂与困难的,想要在迷雾中看清方向,就要寻找更高的确定性,以及更大的预期差。 今天能大家分享一下联…

【Arduino29】74HC595控制LED灯

硬件准备 74HC595直插芯片:1 个 绿色LED灯:4 个 红色LED灯:4 个 220欧的电阻:8个 面包板:1个 杜邦线:若干 硬件连线 软件程序 #define DS_pin 11 //DS引脚 #define STCP_pin 8 //ST_CP引脚,输出…

海学会读《乡村振兴战略下传统村落文化旅游设计》2023年度许少辉八一新书

海学会读《乡村振兴战略下传统村落文化旅游设计》2023年度许少辉八一新书

Ubantu终端常用命令、快捷键和基本操作

目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率,简化操作流程,并进行更多的自定义配置和控制。同时&#xff0c…

Docker的开源容器镜像仓库Harbor安装

概述 Docker Hub是Docker官方提供的在线Docker镜像注册中心,其支持Docker镜像的查询(search)、提交(push)以及获取(pull)。目前,在云原生领域中,CNCF提供Harbor开源版本…

影刀-验证码识别

打开慕课主界面为例子

自己编译静态ffmpeg freetype2 not found问题解决

整理好依赖的ffmpeg仓库地址: https://github.com/pyke369/sffmpeg 报错:ERROR: freetype2 not found using pkg-config 网上查询说是需要安装freetype-devel ​​​​​​​sudo apt install libfreetype6-dev 安装后还是报一样的错,实…

window 添加/删除系统右键菜单项

一、添加文件夹右键菜单项 1.打开Windows注册表编辑器。按下WinR组合键,输入regedit,点击确定。 2.在注册表中,找到以下路径: HKEY_CLASSES_ROOT\Directory\shell 3. 参考其他菜单项进行添加,例如添加WebStorm的菜…

VTK实现模型添加标注标记功能

VTK实现模型添加标注标记高级功能 功能演示 添加标记模型 变换标记模型(朝向、位置、缩放) 删除标记模型 功能介绍 支持在模型表面添加标记模型,标记模型可以切换为不同的模型(演示里是圆柱体)标记模型支持颜色…

linux配置本地yum源

在本地部署服务器时,因为无法联网导致没法使用外网yum源,会对安装服务有些影响。 不过可以通过本地光盘部署yum源赖解决问题。 1.查看一下虚拟机是否有sr0这个文件 ll /dev/sr0 2.创建一个文件做挂载 mkdir /media/cdrom/ mount /dev/sr0 /media/cdrom…

《得帆云 AIGC+低代码PaaS平台系列白皮书》-主流OA集成应用

近年来,随着国内外的信息技术发展日益迅速,无论是企业的业务模式,还是企业的人员管理,都在不断发展变化,OA系统作为公司的核心协调系统,必须能够及时响应公司的发展,实现与企业内部各种业务系统…

混合使用MariaDB和MongoDB的SQL与NoSQL

假设你有一个在Node.js(或任何其他平台)上开发的应用程序。这个应用程序连接到一个MongoDB数据库(NoSQL),用于存储对书籍的评价(给出的星级数量和评论)。再假设你有另一个在Java(或P…

冠达管理:国内产量最大!又一龙头来了…本周4股可申购

本周(9月11日—9月15日),共有4只新股将申购,其间创业板2只(飞南资源、万邦医药),科创板1只(中研股份),沪市主板1只(恒兴新材)。 资料…

【acwing总结】快速排序

原题链接 时间复杂度 nlogn 快排利用分治思想的原理 主要步骤有以下几种 (1):确认分界点 可以q[l] 可以是q[lr] 可以是q[r],也可以是随机值 (2):调整区间 将小于等于分界点的,放到左边去&…

cpp-httplib 源码剖析

文章目录 前言一、cpp-httplib 是什么?二、Server类整体架构三、绑定和监听bind_internallisten_internal 四、路由添加路由路由 五、处理接受请求process_server_socket_coreprocess_request 前言 之前实现自己的http库的时候感觉有一些设计的不是很好&#xff0c…

虹科分享 | Chae$4:针对金融和物流客户的新Chaes恶意软件变体 | 自动移动目标防御

介绍--Chae$4 随着网络威胁的世界以惊人的速度发展,保持领先于这些数字危险对企业来说变得越来越关键。2023年1月,Morphisec发现了一个令人震惊的趋势,许多客户,主要是物流和金融部门的客户,受到了Chaes恶意软件的新的…

【踩坑】Latex中multicolumn/multirow单元格竖线消失的恢复方法

消失的情况: 修复方法: 1、第一点是确保单元格数量正确; 2、第二点是一个小细节,这里的c后面要加个"|": \multicolumn{3}{c|} 当然,如果是左边少,那就加左边;或者直接左…