谷粒商城实战笔记-26-分布式组件-SpringCloud-Gateway网关核心概念原理

news2024/9/28 5:34:46

微服务架构中,API网关扮演着至关重要的角色,它不仅作为微服务间的通信桥梁,还负责安全、监控、限流等职责。

一,网关的发展历程

SpringCloud的网关经历了两代的迭代和更替。

第一代网关是早期的Zuul,由 Netflix 开发并开源。

随着时间的推移和技术的发展,Zuul 面临了一些挑战,比如架构陈旧、性能差、扩展性差、可维护性差,导致其在某些场景下逐渐被其他更现代的技术所取代,如 Spring Cloud Gateway。

虽然Zuul与时俱进的开发2.0版本,但由于SpringCloud Gateway的发展,该版本并未集成都SpringCloud中。

下图是SpringCloud网关的简要发展历程。

在这里插入图片描述

二,SpringCloud Gateway

Spring Cloud Gateway作为Spring家族的一员,自诞生以来便以其现代化的设计理念和卓越的性能表现赢得了广大开发者的青睐。

Spring Cloud Gateway的官方文档地址。

1,核心概念

  • 路由(Route): 路由是Spring Cloud Gateway的基本单位,它定义了请求如何从客户端到达目标服务。每个路由包含一组断言(Predicates)和过滤器(Filters),断言用于匹配请求,过滤器则用于在请求/响应链中执行特定操作。

  • 断言(Predicate): 断言是一种条件语句,用于确定请求是否匹配路由。例如,可以通过路径断言Path来匹配特定的URL路径。

  • 过滤器(Filter): 过滤器用于修改进入或离开网关的请求或响应。它可以执行诸如日志记录、修改请求/响应体、添加响应头等操作。,

2,工作原理

Spring Cloud Gateway的核心是响应式编程模型。它基于Project Reactor框架,能够高效地处理大量并发请求,而不占用过多资源。

在这里插入图片描述

  • 客户端Gateway Client发送请求给网关,
  • 网关的HandlerMapping组件根据配置的断言(Predicate),判断是否请求满足某个路由,满足就发给网关的 WebHandler
  • WebHandler 将请求交给一个过滤器链,请求到达目标服务之前,会执行所有过滤器的 pre 方法
  • 请求到达目标服务处理之后再依次执行所有过滤器的 post 方法

3,一看就懂的案例

看下面真实的网关配置,其中包含了前缀匹配和Cookie匹配:

spring:
  cloud:
    gateway:
      routes:
      - id: secure-service-route
        uri: lb://secure-service
        predicates:
        - Path=/api/secure/**
        - Cookie=auth-token,securetoken
        filters:
        - AddRequestHeader=X-Forwarded-Prefix, /api/secure
        - AddRequestParameter=traceId, ${random.value}

上述的Spring Cloud Gateway配置定义了一条名为secure-service-route的路由规则,用于将特定类型的请求转发到一个称为secure-service的后端服务。

逐个解析配置内容:

  1. 路由ID (id: secure-service-route):这是路由的唯一标识符,便于在日志或配置中引用。

  2. 目标URI (uri: lb://secure-service):指定当请求匹配此路由时,应将请求转发到名为secure-service的服务。lb://前缀表示使用负载均衡机制从服务发现中选择一个实例。

  3. 断言 (predicates):

    • Path=/api/secure/**:这表示只有当请求路径以/api/secure/开头时,才会匹配此路由规则。
    • Cookie=auth-token,securetoken:这表示请求必须包含一个名为auth-token的Cookie,且其值必须为securetoken。这是基本的安全检查,确保请求已被认证。
  4. 过滤器 (filters):

    • AddRequestHeader=X-Forwarded-Prefix, /api/secure:在请求被转发之前,向请求头中添加一个名为X-Forwarded-Prefix的头,其值为/api/secure。这有助于后端服务理解请求的原始路径。
    • AddRequestParameter=traceId, ${random.value}:在请求中添加一个名为traceId的查询参数,其值为一个随机生成的字符串。这用于分布式追踪,以便在整个微服务链路中跟踪请求。

3.1,具体请求示例

假设一个客户端发起如下请求:

GET /api/secure/userinfo HTTP/1.1
Host: yourapp.example.com
Cookie: auth-token=securetoken

下面是Spring Cloud Gateway处理这个请求的流程:

  1. 接收请求:网关接收到客户端的请求。

  2. 匹配路由:网关检查其配置的路由规则,寻找匹配的规则。在本例中,请求的路径以/api/secure/开头,并且包含正确的auth-token Cookie,因此它匹配secure-service-route路由规则。

  3. 应用过滤器:在转发请求之前,网关会应用配置的过滤器。首先,它会向请求头中添加X-Forwarded-Prefix头,然后在请求中添加一个随机生成的traceId参数。

  4. 转发请求:修改后的请求被转发到secure-service服务。请求可能看起来像这样(简化版):

    GET /userinfo?traceId=random123456 HTTP/1.1
    Host: secure-service.example.com
    X-Forwarded-Prefix: /api/secure
    Cookie: auth-token=securetoken
    
  5. 处理响应secure-service处理请求并返回响应。

  6. 返回响应:网关接收到响应后,可以再次应用过滤器对响应进行修改,然后将响应返回给原始客户端。

通过这种方式,Spring Cloud Gateway不仅能够智能地将请求路由到正确的服务,而且还能够添加额外的请求头和参数,以增强安全性、追踪能力和上下文信息。

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

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

相关文章

【密码学】数字签名

一、数字签名的基本概念 数字签名是一种用于验证电子文档完整性和身份认证的密码学技术。它通过使用公钥加密体系中的私钥对文档的一部分(通常是文档的摘要)进行加密,从而创建一个“签名”。这个签名可以附在文档上,或作为一个单独…

巧用 VScode 网页版 IDE 搭建个人笔记知识库!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 巧用 VScode 网页版 IDE 搭建个人笔记知识库! 描述:最近自己在腾讯云轻量云服务器中部署了一个使用在线 VScode 搭建部署的个人Markdown在线笔记,考虑到在线 VScode 支持终…

C++笔试真题

可变分区管理方案 最佳适应:空闲区按容量递增最坏适应:空闲区按容量递减首先适应:空闲区按地址递增 C的结构体中有构造函数。 Linux新建用户或组 useradd:命令用于建立用户账号usermod:修改用户账号groupadd&#…

Spire.PDF for .NET【文档操作】演示:C#/VB.NET:压缩 PDF 文档

大型 PDF 文件处理起来很麻烦,占用宝贵的存储空间并减慢传输和上传速度。压缩 PDF 文档是一种简单有效的方法,可以减少文件大小并针对各种用途进行优化。通过压缩 PDF,您可以更轻松地通过电子邮件或云存储平台共享它们,加快下载速…

用Apipost压力测试接口

用Apipost压力测试接口 1.点击自动化测试 2.选择要测试的接口 3.如果没有接口,就先在api调试中添加要测试的接口 4.根据自己的需求设置相应的参数,这里我压测10次 5.这样就可以压测接口了,非常nice

接口幂等性和解决方案

针对前端重复发起相同请求的解决方案: 注意: Redis保证了在相同key的情况下,只会保留一条数据,这就保证了多次请求只会消费一条数据。 并且需要注意的是,生成/获取token和携带token发送请求的过程需要是两个不同的过…

showdoc sqli to rce漏洞利用思考

漏洞版本 sqli <3.2.5 phar 反序列化 <3.2.4 漏洞分析 前台sqli 补丁 https://github.com/star7th/showdoc/commit/84fc28d07c5dfc894f5fbc6e8c42efd13c976fda 补丁对比发现&#xff0c;在server/Application/Api/Controller/ItemController.class.php中将$item_id变量…

Java--抽象类

1.抽象--abstract 2.不能对抽象类进行实例化&#xff0c;也就是不能new这个抽象类 3.抽象类的应用&#xff0c;就是在class前加入abstract这个单词&#xff0c;同理抽象方法也是在void前加入abstract 4.在抽象类中可以写普通方法&#xff0c;但抽象方法只能写在抽象类中 5.…

Linux账号和权限管理详解

Linux系统中安装和管理程序 太详细了 &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的…

婚恋交友语音交友小程序APP系统开发

在数字化时代&#xff0c;婚恋交友的方式也日益多样化。传统的相亲、朋友介绍等方式已经无法满足现代人快节毒的生活需求&#xff0c;更多的人开始选择通过线上平台寻找自己的另-婚恋交友语音交友小程序APP应运而生&#xff0c;为单身男女提供了个便捷、高效的交友平台。本文将…

vue使用quill编辑器自定义附件上传方法,并根据上传附件名称生成链接

1、附件上传 需求&#xff1a; 在编辑器中上传word,pdf,excel等附件后&#xff0c;能根据上传附件的名称生成link链接&#xff0c;在展示页面能实现点击链接下载或预览附件&#xff0c;效果图如下: 实现方法&#xff1a; quill编辑器自身带有link&#xff0c;但不满足需求&…

探索【Python面向对象】编程:新时代的高级编程范式详解

目录 1. 面向对象编程概念&#xff08;OOP&#xff09; 1.1 什么是类和对象&#xff1f; 1.2 类的定义 1.3 类和对象的关系 1.4 小李的理解 2. 抽象 2.1 抽象的概念 2.2 抽象类和方法 2.3 小李的理解 3. 类和实例 3.1 类的定义和实例化 3.2 类的属性和方法 3.3 小…

[Linux][Shell][Shell逻辑控制]详细讲解

目录 1.if 判断1.if-then2.if-then-else3.elif4.case5.实际上手 2.条件测试0.事前说明1.test 命令2.[]3.双括号1.(())2.[[]] 4.实际上手 3.循环1.for2.while3.until命令4.控制循环1.break2.continue 5.处理循环的输出 1.if 判断 1.if-then 语法&#xff1a;if command thenco…

Java技术栈总结:容器集合篇

一、List 1、ArrayList &#xff08;1&#xff09;底层数据结构 底层数据结构为数组。数组是一种用连续的内存空间存储相同数据类型数据的线性数据结构。 Q&#xff1a;为什么数组索引下标从0开始&#xff1f; A&#xff1a;从0开始&#xff0c;对应寻址公式&#xff1a;a[i]…

FLStudio21.3.12中文破解版本安装包win+mac电脑安装包下载

&#x1f3a4; FL Studio 21中文版&#xff1a;音乐制作新宠&#xff0c;让你的创作起飞&#xff01; 嗨&#xff0c;亲爱的音乐创作者们&#xff01;&#x1f44b;今天要和大家分享一个让我超级兴奋的宝藏软件——FL Studio 21中文版&#xff01;这不仅仅是一款音乐制作软件&…

科研绘图系列:R语言金字塔图(pyramid plot)

介绍 金字塔图(Pyramid chart)是一种用于展示人口统计数据的图表,特别是用于展示不同年龄段的人口数量。这种图表通常用于展示人口结构,比如性别和年龄的分布。 特点: 年龄分层:金字塔图按年龄分层,每一层代表一个年龄组。性别区分:通常,男性和女性的数据会被分别展…

Linux命令-grep/wc/管道符

1、Linux命令-grep/wc/管道符 2、echo/tail/重定向符 3、vi/vim 编辑器

有哪些好用的考勤管理系统?

&#x1f308; 对于企业而言&#xff0c;考勤管理不仅仅是支持员工工资计算&#xff0c;还会对实际的运营产生很大影响。一个好用的考勤管理系统能够实现考勤数据的实时采集和管理&#xff0c;保证考勤数据的稳定运行&#xff0c;从而实现复杂的工作安排&#xff0c;有效降低人…

uniapp上架到appstore遇到的问题

1、appstore在美国审核&#xff0c;需要把服务器接口的国外访问权限放开 2、登陆部分 a、审核时只能有密码登陆&#xff0c;可以通过接口响应参数将其他登陆方式暂时隐藏&#xff0c;审核成功后放开即可 b、需要有账号注销功能 3、使用照相机和相册功能时需要写清楚描述文案

具有 0.5V 超低输入电压的 3A 升压转换器TPS61021

1 特性 输入电压范围&#xff1a;0.5V 至 4.4V 启动时的最小输入电压为 0.9V 可设置的输出电压范围&#xff1a;1.8V 到 4.0V 效率高达 91%&#xff08;VIN 2.4V、VOUT 3.3V 且 IOUT 1.5A 时&#xff09; 2.0MHz 开关频率 IOUT > 1.5A&#xff0c;VOUT 3.3V&#xff08;V…