【Spring Cloud Gateway 新一代网关】—— 每天一点小知识

在这里插入图片描述

                                                                       💧 S p r i n g C l o u d G a t e w a y 新一代网关 \color{#FF1493}{Spring Cloud Gateway 新一代网关} SpringCloudGateway新一代网关💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥


文章目录

  • 🐳Spring Cloud Gateway 新一代网关
    • 1. 概述
    • 2. Gateway的作用
    • 3. 三大核心概念
    • 4. Gateway的工作流程
    • 5. 入门配置
    • 6. 常用的Route Predicate
    • 总结
  • 🐳结语


🐳Spring Cloud Gateway 新一代网关

1. 概述

Spring Cloud Gateway是Spring Cloud生态系统中的一员,它是基于Spring Framework 5、Project Reactor和Spring Boot 2构建的新一代网关。官方定义它为:一种构建在Spring Framework 5、Project Reactor和Spring Boot 2之上的非阻塞的API网关。

在这里插入图片描述

作为Spring Cloud生态系统中的新生力量,Spring Cloud Gateway具备很多强大的功能和优势,使得它成为众多微服务架构中的首选网关。接下来,我们将深入探讨Spring Cloud Gateway的作用、三大核心概念以及工作流程,并通过一个入门配置和常用的Route Predicate示例来带领读者了解并掌握这一强大工具。


2. Gateway的作用

💧Spring Cloud Gateway作为API网关,其功能非常丰富,可以应用于多个方面:

  • 路由(Routing):根据请求的URL将请求路由到不同的后端服务。它可以将一个统一的URL映射到多个不同服务的多个实例上,实现服务之间的解耦和灵活性。

  • 负载均衡(Load Balancing):通过与Spring Cloud注册中心(如Eureka)结合使用,Gateway可以实现负载均衡,将请求合理地分发到后端多个实例上,提高系统的可用性和性能。

  • 统一鉴权(Unified Authentication):作为微服务架构中的入口,Gateway可以集中处理鉴权逻辑,确保所有请求经过统一的鉴权机制。

  • 跨域支持(Cross-Origin Resource Sharing,CORS):Gateway可以在服务之间处理跨域请求,避免前端应用发起跨域请求而导致的安全问题。

  • 访问控制(Access Control):Gateway可以实现对请求的访问控制,根据一定规则过滤掉非法请求,保障系统的安全性。

  • 发布控制(Release Control):Gateway可以实现动态的请求路由和版本控制,方便进行发布和回滚操作,降低系统的风险。

  • 流量染色(Traffic Shaping):Gateway可以根据需要对请求进行染色,实现针对性的流量控制和管理。

  • 接口保护(Endpoint Protection):Gateway可以保护后端服务的敏感接口,避免未授权访问。

  • 统一日志(Unified Logging):Gateway可以对请求和响应进行统一的日志处理,方便系统的监控和故障排查。

  • 统一文档(Unified Documentation):Gateway可以根据后端服务的API生成统一的文档,方便前端开发人员查阅和使用。

3. 三大核心概念

💧在理解和使用Spring Cloud Gateway时,需要了解其三大核心概念:

  • Route(路由):Route定义了一个路由的基本信息,包括路由的ID、目标URI、一组Predicate和Filter。通过路由,Gateway可以将请求转发到后端的某个具体服务上。

  • Predicate(断言):Predicate是一个Java 8的Predicate,它可以根据请求的各种属性(例如请求的路径、方法、Header等)来匹配请求,如果匹配成功,则将请求交给对应的Route处理。

  • Filter(过滤器):Filter是Spring框架中的GatewayFilter的实例,它可以对请求和响应进行处理,是网关的核心工作单元。

4. Gateway的工作流程

💧Spring Cloud Gateway的工作流程如下:

  1. 客户端发送请求到Gateway。

  2. Gateway根据定义的Route和Predicate来匹配请求。

  3. 如果请求匹配成功,Gateway将请求交给对应的Filter链进行处理。

  4. Filter链依次处理请求,可以在此时进行请求的修改、鉴权、限流等操作。

  5. Filter链处理完毕后,将请求转发给后端服务。

  6. 后端服务处理请求并返回响应。

  7. 响应经过Filter链处理后返回给客户端。

5. 入门配置

💧创建一个Spring Boot项目,并添加Spring Cloud Gateway的依赖:

<!-- pom.xml -->
<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
</dependencies>

💧接下来,在application.properties中配置Gateway的基本信息:

# application.properties
spring.application.name=gateway-service
server.port=8080

# 定义Route和Predicate
spring.cloud.gateway.routes[0].id=example_route
spring.cloud.gateway.routes[0].uri=http://example.com
spring.cloud.gateway.routes[0].predicates[0]=Path=/example/**

💧在上述配置中,我们定义了一个名为"example_route"的Route,将请求的路径为/example/**的请求转发到http://example.com

6. 常用的Route Predicate

💧Route Predicate可以根据请求的属性进行匹配,Gateway提供了许多常用的Predicate:

  • Path Route Predicate:根据请求的路径进行匹配。

  • Method Route Predicate:根据请求的HTTP方法进行匹配。

  • Header Route Predicate:根据请求的Header进行匹配。

  • Cookie Route Predicate:根据请求的Cookie进行匹配。

  • Query Route Predicate:根据请求的Query参数进行匹配。

  • Host Route Predicate:根据请求的Host进行匹配。

  • RemoteAddr Route Predicate:根据请求的远程IP地址进行匹配。

💧使用Route Predicate可以实现灵活的路由匹配,根据请求的不同属性将请求转发到不同的后端服务。下面我们将介绍一些常用的Route Predicate示例:

  1. Path Route Predicate:根据请求的路径进行匹配。
# 将以 /api 开头的请求转发到 http://backend-service/api 下
spring.cloud.gateway.routes[0].id=backend_route
spring.cloud.gateway.routes[0].uri=http://backend-service
spring.cloud.gateway.routes[0].predicates[0]=Path=/api/**
  1. Method Route Predicate:根据请求的HTTP方法进行匹配。
# 将所有的POST请求转发到 http://backend-service/post 下
spring.cloud.gateway.routes[0].id=backend_route
spring.cloud.gateway.routes[0].uri=http://backend-service
spring.cloud.gateway.routes[0].predicates[0]=Method=POST
  1. Header Route Predicate:根据请求的Header进行匹配。
# 将携带特定Header的请求转发到 http://backend-service/special 下
spring.cloud.gateway.routes[0].id=backend_route
spring.cloud.gateway.routes[0].uri=http://backend-service
spring.cloud.gateway.routes[0].predicates[0]=Header=SpecialHeader, true
  1. Cookie Route Predicate:根据请求的Cookie进行匹配。
# 将携带特定Cookie的请求转发到 http://backend-service/cookie 下
spring.cloud.gateway.routes[0].id=backend_route
spring.cloud.gateway.routes[0].uri=http://backend-service
spring.cloud.gateway.routes[0].predicates[0]=Cookie=SpecialCookie, value
  1. Query Route Predicate:根据请求的Query参数进行匹配。
# 将携带特定Query参数的请求转发到 http://backend-service/query 下
spring.cloud.gateway.routes[0].id=backend_route
spring.cloud.gateway.routes[0].uri=http://backend-service
spring.cloud.gateway.routes[0].predicates[0]=Query=param, value
  1. Host Route Predicate:根据请求的Host进行匹配。
# 将访问特定Host的请求转发到 http://backend-service 下
spring.cloud.gateway.routes[0].id=backend_route
spring.cloud.gateway.routes[0].uri=http://backend-service
spring.cloud.gateway.routes[0].predicates[0]=Host=example.com
  1. RemoteAddr Route Predicate:根据请求的远程IP地址进行匹配。
# 将特定IP地址的请求转发到 http://backend-service/ip 下
spring.cloud.gateway.routes[0].id=backend_route
spring.cloud.gateway.routes[0].uri=http://backend-service
spring.cloud.gateway.routes[0].predicates[0]=RemoteAddr=192.168.1.100

💧上述Route Predicate示例可以根据不同的条件实现灵活的路由规则,将请求转发到不同的后端服务。

总结

Spring Cloud Gateway作为Spring Cloud生态系统中的重要组件,为我们构建高性能、高可用的微服务架构提供了很多支持。希望通过本文,读者能够深入理解Spring Cloud Gateway的强大功能,并在实际项目中灵活运用,为微服务架构的成功实施添砖加瓦。


注意:上述示例代码为简化的演示版本,并未包含完整的异常处理和配置细节。在实际项目中,需要根据具体情况进行进一步完善。

在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中医药行业如何进行数字化转型?看天津同仁堂谈“有道有术有零代码”

张伯礼院士曾指出&#xff0c;中药制造的现代化水平&#xff0c;还停留在10%左右的阶段。中医药行业&#xff0c;老字号企业&#xff0c;该如何通过数字化焕发新活力&#xff1f; 天津同仁堂通过与伙伴云合作&#xff0c;零代码构建数字化系统&#xff0c;让技术与思维共同成长…

html,css初学

安装VSCODE ,插件&#xff1a;live server &#xff0c;html support html 然后为了更好地理解&#xff0c;请逐步输入&#xff0c;并及时查看效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>D…

PCB封装设计指导(十一)画出脚标,极性标识和特殊器件标识

PCB封装设计指导(十一)画出脚标,极性标识,特殊器件标识 定义完pin number之后,就需要画出器件的脚标,极性标识,特殊标识等丝印相关的信息了,这些说明对辅助PCB布局有很好的作用,当然对后续贴片也很有帮助。 如何添加,具体见如下说明 1.脚标一般都用数字表示,silks…

力扣热门100题之和为k的子数组【中等】

题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k 3 输出&#xff1a;2 …

Acwing.898 数字三角形(动态规划)

题目 给定一个如下图所示的数字三角形&#xff0c;从顶部出发&#xff0c;在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点&#xff0c;一直走到底层&#xff0c;要求找出─条路径&#xff0c;使路径上的数字的和最大。 输入格式 第一行包含整数n&#xff0…

MES管理系统给汽配企业带来了哪些效益

汽车工业是一个庞大的社会经济系统工程&#xff0c;不同于普通产品&#xff0c;汽车产品是一个高度综合的最终产品&#xff0c;需要组织专业化协作的社会化大生产&#xff0c;需要相关工业产品与之配套。如何提高生产效率和产品质量成为了一个关键问题&#xff0c;而汽配企业ME…

EtherCAT转TCP/IP网关EtherCAT解决方案

你是否曾经为生产管理系统的数据互联互通问题烦恼过&#xff1f;曾经因为协议不同导致通讯问题而感到困惑&#xff1f;现在&#xff0c;我们迎来了突破性的进展&#xff01; 介绍捷米特JM-TCPIP-ECT&#xff0c;一款自主研发的Ethercat从站功能的通讯网关。它能够连接到Etherc…

RDIFramework.NET CS敏捷开发框架 V6.0发布(支持.NET6+、Framework双引擎,全网唯一)

全新RDIFramework.NET V6.0 CS敏捷开发框架发布&#xff0c;全网唯一支持.NET6&#xff0c;Framework双引擎&#xff0c;降低开发成本&#xff0c;提高产品质量&#xff0c;提升用户体验与开发团队稳定性&#xff0c;做软件就选RDIFramework.NET开发框架。 1、RDIFramework.NET…

毓恬冠佳冲刺上市:打破汽车天窗外商垄断,长安汽车为其主要客户

撰稿|行星 来源|贝多财经 7月23日&#xff0c;上海毓恬冠佳科技股份有限公司&#xff08;以下简称“毓恬冠佳”&#xff09;在深圳证券交易所的审核状态变更为“已问询”。据贝多财经了解&#xff0c;毓恬冠佳于2023年6月27日递交招股书&#xff0c;准备在创业板上市。 本次冲…

Linux---详解进程信号

进程信号 &#x1f373;信号理解&#x1f9c8;什么是信号&#xff1f;&#x1f95e;进程信号&#x1f953;查看系统信号&#x1f969;在技术角度理解信号&#x1f357;注意 &#x1f356;信号处理&#x1f9c7;信号异步机制 &#x1f354;信号产生&#x1f35f;通过终端按键产生…

vue中使用jsMind生成思维导图 截图功能踩坑

npm i jsmind先安装&#xff0c;再引入 import jsmind/style/jsmind.css import jsMind from jsmind/js/jsmind.js require(jsmind/js/jsmind.draggable.js) require(jsmind/js/jsmind.screenshot.js)正常引入是这样的&#xff0c;然后渲染也没问题 <template><div …

如何打开工业相机(海康)与halcon方式打开

使用海康相机&#xff0c;下载对应的客户端软件 地址&#xff1a;https://www.hikrobotics.com/cn/machinevision/service/download 界面如下&#xff1a; 使用 halcon 读取相机&#xff0c;需要将对应的动态链接库dll文件放入halcon的安装目录中&#xff0c;如下&#xff0c;…

全志F1C200S嵌入式驱动开发(spi-nor驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s本身也支持spi-nor flash。当然,不管是norflash,还是nandflash,都是为了能够让程序脱离sd卡,直接依靠板子上面的flash,就可以完成正常地加载和运行工作。tf…

MySQL数据库优化

MySQL数据库优化 1.1 SQL及索引优化1.2 数据库表结构优化1.3 系统配置优化1.4 硬件配置优化 2 SQL及索引优化2.1 慢查日志2.1.1 检查慢查日志是否开启2.1.2 MySQL慢查日志的存储格式 2.2 MySQL慢查日志分析工具&#xff08;mysqldumpslow&#xff09;2.2.1 介绍2.2.2 用法 2.3 …

二进制子集题解

样例输入&#xff1a; 13样例输入&#xff1a; 0 1 4 5 8 9 12 13思路分析&#xff1a; 这道题大体就是进制转换然后按位 d f s dfs dfs。进制转换比较好理解&#xff0c;不懂得可以自行 b d f s ( 百度优先搜索 ) bdfs(百度优先搜索) bdfs(百度优先搜索)一下。 代码&#…

索引的数据结构

索引的数据结构 部分资料来自B站尚硅谷-宋红康老师 1. 为什么使用索引 使用索引是为了加快数据库的查询速度和提高数据库的性能。索引是数据库表中的一种数据结构&#xff0c;它可以帮助数据库快速定位并检索所需的数据。 当数据库表中的数据量较大时&#xff0c;如果没有索…

C#中简单Winform程序编译(待验证)

1、文件架构 2、MainWindow.xaml <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.…

【仿写spring】一、通过反射读取带有@RequestMapping与@Controller注解的类并模拟请求路径调用方法

目录 简介思路实践一、自定义注解RequestMapping&#xff0c;Controller二、路径转全限定名方法三、扫描文件夹四、通过反射来寻找有RequestMapping以及Controller的类五、获取对象实例六、通过invoke调用方法 文件结构以及测试结果1、文件结构2、TestController3、测试结果 简…

C#is、as关键字及获取当前活动窗体的实例

这篇日志记录一下C#中is关键字及as关键字的用法。 Is&#xff1a;判断检查对象是否与给定类型兼容 As&#xff1a;将对象转换为指定类型&#xff08;强转&#xff09;&#xff0c;就跟&#xff08;int&#xff09;这样的用法是一样的。 获取当前窗体的活动子窗体。 有一个属…

MATLAB与ROS联合仿真——Simulink生成ROS代码

当我们用simulink完成控制程序的搭建后&#xff0c;我们期望下一次可以直接对ROS进行控制&#xff0c;而不是每次都需要启动matlab和simulink&#xff0c;因此我们可以使用simulink的代码生成器&#xff0c;生成ROS代码 1、生成代码前需要进行如下的设置 &#xff08;1&#xf…