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

微服务架构中,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-routeuri: lb://secure-servicepredicates:- Path=/api/secure/**- Cookie=auth-token,securetokenfilters:- 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.rhkb.cn/news/374270.html

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

相关文章

kafka 消费者

消费者 消费者。消费者连接到Kafka上并接收消息,进而进行相应的业务逻辑处理。 消费组 消费者负责订阅Kafka中的主题,并且从订阅的主题上拉取消息。 消费组:每个消费者都有一个对应的消费组,每一个分区只能被一个消费组中的一个…

深入了解Rokid UXR2.0 SDK内置的Unity AR Glass开发组件

本文将了解到Rokid AR开发组件 一、RKCameraRig组件1.脚本属性说明2.如何使用 二、PointableUI组件1.脚本属性说明2.如何使用 三、PointableUICurve组件1.脚本属性说明2.如何使用 四、RKInput组件1.脚本属性说明2.如何使用 五、RKHand组件1.脚本属性说明2.如何使用3.如何禁用手…

昇思25天学习打卡营第17天|基于 MindSpore 实现 BERT 对话情绪识别

基于 MindSpore 实现 BERT 对话情绪识别 BERT介绍 BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,由谷歌在2018年提出。从以下6个方面来介绍BERT: 1. 预训练和微调&…

Linux C语言基础 day8

目录 思维导图: 学习目标: 学习内容: 1. 字符数组 1.1 二维字符数组 1.1.1 格式 1.1.2 初始化 1.1.3 二维字符数组输入输出、求最值、排序 2. 函数 2.1 概念 关于函数的相关概念 2.2 函数的定义及调用 2.2.1 定义函数的格式 2.3…

GaussDB关键技术原理:高性能(五)

GaussDB关键技术原理:高性能(四)从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存储和向量化引擎、SMP并行执行等五方面对高性能关键技术进行解读,本篇将从LLVM动态查询编译执行、SQL-BYPASS执行优化、线程池化、…

k8s核心操作_Ingress统一网关入口_域名访问配置_ingress域名转发规则配置_根据域名访问不同服务---分布式云原生部署架构搭建026

上一节我们已经把 ingress 安装好了可以看到 kubectl get svc -A 可以看到 出现了ingress-nginx 的service,在ingre-nginx这个命名空间中,有两个,一个是 ingress-nginx-controller 开了两个一个是对应http,一个对应https 一个是 ingress-nginx-controller-admission 对…

14.爬虫---Selenium 经典动态渲染工具的使用

14.Selenium 经典动态渲染工具的使用 1.查看chrome浏览器版本2.ChromeDriver 安装3.Selenium 安装4.验证安装5.基本用法5.1启动浏览器5.2导航到页面5.3查找元素5.3.1单个元素 find_element5.3.2多个元素 find_elements 5.4 执行操作5.5 动作链ActionChains5.6 执行 JavaScript …

修BUG:程序包javax.servlet.http不存在

貌似昨晚上并没有成功在tomcat上面运行,而是直接运行了网页。 不知道为啥又报错这个。。。 解决方案: https://developer.baidu.com/article/details/2768022 就整了这一步就行了 而且我本地就有这个tomcat就是加进去了。 所以说啊,是不是&a…

C语言 | Leetcode C语言题解之第227题基本计算题II

题目&#xff1a; 题解&#xff1a; int calculate(char* s) {int n strlen(s);int stk[n], top 0;char preSign ;int num 0;for (int i 0; i < n; i) {if (isdigit(s[i])) {num num * 10 (int)(s[i] - 0);}if (!isdigit(s[i]) && s[i] ! || i n - 1) {s…

二分法求函数的零点 信友队

题目ID&#xff1a;15713 必做题 100分 时间限制: 1000ms 空间限制: 65536kB 题目描述 有函数&#xff1a;f(x) 已知f(1.5) > 0&#xff0c;f(2.4) < 0 且方程 f(x) 0 在区间 [1.5,2.4] 有且只有一个根&#xff0c;请用二分法求出该根。 输入格式 &#xff08;无…

【Linux进阶】文件系统8——硬链接和符号连接:ln

在Linux下面的链接文件有两种&#xff0c; 一种是类似Windows的快捷方式功能的文件&#xff0c;可以让你快速地链接到目标文件&#xff08;或目录)&#xff1b;另一种则是通过文件系统的inode 链接来产生新文件名&#xff0c;而不是产生新文件&#xff0c;这种称为硬链接&…

sql注入时间盲注

基于时间的盲注 也叫延时注入。通过观察页面&#xff0c;既没有回显数据库内容&#xff0c;又没有报错信息也没有布尔类型状态&#xff0c;那么我们可以考虑用“绝招”--延时注入。延时注入就是根据页面的响应时间来判断是否存在注入&#xff0c;一点一点注入出数据库的信息。我…

HTML+CSS+JS 实现3D风吹草动效果(B站视频)

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>3D effect&…

Python 爬虫与 Java 爬虫:相似之处、不同之处和选项

在信息时代&#xff0c;网络上可用的数据量巨大且不断增长。为了从这些数据中提取有用的信息&#xff0c;爬虫已成为一种重要的技术。Python 和 Java 都是流行的编程语言&#xff0c;都具有强大的爬虫功能。本文将深入探讨 Python 爬虫和 Java 爬虫之间的差异&#xff0c;以帮助…

PCIe驱动开发(1)— 开发环境搭建

PCIe驱动开发&#xff08;1&#xff09;— 开发环境搭建 一、前言 二、Ubuntu安装 参考: VMware下Ubuntu18.04虚拟机的安装 三、QEMU安装 参考文章&#xff1a;QEMU搭建X86_64 Ubuntu虚拟系统环境 四、安装Ubuntu 下载地址&#xff1a;https://old-releases.ubuntu.com…

【错题集-编程题】买卖股票的最好时机(四)(动态规划)

力扣对应题目链接&#xff1a;188. 买卖股票的最佳时机 IV - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;买卖股票的最好时机(四)_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 1、状态表示 为了更加清晰的区分买入和卖出&#xff0c;我们换成有股…

昇思MindSpore学习笔记6-05计算机视觉--SSD目标检测

摘要&#xff1a; 记录MindSpore AI框架使用SSD目标检测算法对图像内容识别的过程、步骤和方法。包括环境准备、下载数据集、数据采样、数据集加载和预处理、构建模型、损失函数、模型训练、模型评估等。 一、概念 1.模型简介 SSD目标检测算法 Single Shot MultiBox Detecto…

MapReduce底层原理详解:大案例解析(第32天)

系列文章目录 一、MapReduce概述 二、MapReduce工作机制 三、Map&#xff0c;Shuffle&#xff0c;reduce阶段详解 四、大案例解析 文章目录 系列文章目录前言一、MapReduce概述二、MapReduce工作机制1. 角色与组件2. 作业提交与执行流程1. 作业提交&#xff1a;2. Map阶段&…

linux_进程概念——理解冯诺依曼体系结构

前言&#xff1a; 本篇内容是为了让友友们较好地理解进程的概念&#xff0c; 而在真正了解进行概念之前&#xff0c; 要先了解一下冯诺依曼体系结构。 所以博主会先对冯诺伊曼体系结构进行解释&#xff0c; 然后再讲解进程的概念。 ps&#xff1a; 本篇内容适合了解一些linux指…

Firealpaca 解锁版下载及安装教程 (火焰羊驼绘画软件)

前言 FireAlpaca是一款简单易用的电脑绘画软件&#xff0c;采用了类似于Photoshop的图层绘画方式。对于喜欢手绘和创作漫画的朋友来说&#xff0c;FireAlpaca的多图层功能使得绘画过程更加便捷和简单。作为一个小型图像编辑软件&#xff0c;它能够轻松处理多个图层或手绘图&am…