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

【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的强大功能,并在实际项目中灵活运用,为微服务架构的成功实施添砖加瓦。


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

在这里插入图片描述


🐳结语

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

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

相关文章:

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

&#x1f4a7; S p r i n g C l o u d G a t e w a y 新一代网关 \color{#FF1493}{Spring Cloud Gateway 新一代网关} SpringCloudGateway新一代网关&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&a…...

Java 中的关键字 final 和 static

一、关键字 final final 修饰符可以用来修饰类、方法和变量&#xff0c;final 修饰的类不能够被继承&#xff0c;修饰的方法不能被继承类重新定义&#xff0c;修饰的变量为常量&#xff0c;是不可修改的。 1.1 final 变量 final 有"最后的、最终的"的含义&#xf…...

Spring Cloud OpenFeign 全教程

1. 声明式 REST 客户端&#xff1a; Feign Feign 是一个声明式的 Web Service 客户端。它使编写 Web Service 客户端更容易。要使用 Feign&#xff0c;需要创建一个接口并对其进行注解。它有可插拔的注解支持&#xff0c;包括 Feign 注解和 JAX-RS 注解。Feign 还支持可插拔的…...

LLaMA模型论文《LLaMA: Open and Efficient Foundation Language Models》阅读笔记

文章目录 1. 简介2.方法2.1 预训练数据2.2 网络架构2.3 优化器2.4 高效的实现 3.论文其余部分4. 参考资料 1. 简介 LLaMA是meta在2023年2月开源的大模型&#xff0c;在这之后&#xff0c;很多开源模型都是基于LLaMA的&#xff0c;比如斯坦福大学的羊驼模型。 LLaMA的重点是比…...

了解Unity编辑器 之组件篇Effects(十一)

一、Halo&#xff1a;是一个可用于游戏对象的特效组件&#xff0c;它可以在对象周围添加一个光晕效果 Color属性: 用于设置Halo的颜色。你可以通过选择颜色面板中的颜色来指定光晕的外观。选择适当的颜色可以使光晕与游戏场景中的其他元素相匹配或突出显示。 Size属性: 用于设…...

笔记整理-SpringBoot中的扩展点

SpringBoot有哪些扩展点 aware 感知类接口 aware系列的扩展接口&#xff0c;允许spring应用感知/获取特定的上下文环境或对象。bean生命周期控制类接口 bean生命周期类的接口&#xff0c;可以控制spring容器对bean的处理。app生命周期控制类接口 app生命周期控制类接口&#xf…...

各系统的目录信息路径

Windows系统: 查看系统版本——C:\boot.ini IIS配置文件——C:\windows\system32\inetsrv\MetaBase.xml 存储Windows系统初次安装的密码——C:\windows\repair\sam Mysql配置——C:\ProgramFiles\mysql\my.ini MySQL root密码——C:\P…...

Asp.Net 使用Log4Net (封装帮助类)

Asp.Net 使用Log4Net (封装帮助类) 1. 创建Log4Net帮助类 首先&#xff0c;在你的项目中创建一个Log4Net帮助类&#xff0c;用于封装Log4Net的配置和日志记录逻辑。 using log4net; using log4net.Config;public class LogHelper {private static readonly ILog log LogMan…...

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信…...

dubbo原理框架设计

dubbo原理框架设计 &#xff08;1&#xff09;config 配置层&#xff1a;对外配置接口&#xff0c;以 ServiceConfig, ReferenceConfig 为中心&#xff0c;可以直接初始化配置类&#xff0c;也可以通过 spring 解析配置生成配置类。 &#xff08;2&#xff09;proxy 服务代理…...

【数据挖掘】使用 LSTM 进行时间和序列预测

一、说明 每天&#xff0c;人类在执行诸如过马路之类的任务时都会做出被动预测&#xff0c;他们估计汽车的速度和与汽车的距离&#xff0c;或者通过猜测球的速度并相应地定位手来接球。这些技能是通过经验和实践获得的。然而&#xff0c;由于涉及众多变量&#xff0c;预测天气或…...

Typescript第四章 函数(声明和调用,注解参数类型,多态,类型别名,泛型)

第四章 函数 ts中声明和调用函数的不同方式签名重载多态函数多态类型声明 4.1 声明和调用函数 在js中函数是一等对象&#xff0c;我们可以像对象那样使用函数&#xff0c;可以复制给变量&#xff0c;可以作为参数传递&#xff0c;返回值&#xff0c;赋值给对象的原型&#x…...

大数据-Spark批处理实用广播Broadcast构建一个全局缓存Cache

1、broadcast广播 在Spark中&#xff0c;broadcast是一种优化技术&#xff0c;它可以将一个只读变量缓存到每个节点上&#xff0c;以便在执行任务时使用。这样可以避免在每个任务中重复传输数据。 2、构建缓存 import org.apache.spark.sql.SparkSession import org.apache.s…...

Android Service的生命周期,两种启动方法,有什么区别

Android Service的生命周期&#xff0c;两种启动方法&#xff0c;有什么区别 Android Service是一种后台组件&#xff0c;用于在后台执行长时间运行的任务&#xff0c;而无需与用户界面进行交互。Service具有自己的生命周期&#xff0c;其主要包含以下几个状态&#xff1a;创建…...

测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)

ViewFaceCore模块中的FaceQuality支持预测人脸质量&#xff0c;最初以为是预测人体体重&#xff0c;实际测试过程中才发现是评估人脸图片质量&#xff0c;主要调用Detect函数执行图片质量检测操作&#xff0c;其函数原型如下所示&#xff1a; //// 摘要:// 人脸质量评估///…...

Go语言网络库net/http

Go语言网络库net/http Http 协议(Hyper Text Transfer Protocol&#xff0c;超文本传输协议)是一个简单的请求-响应协议&#xff0c;它通常运行在 TCP 之 上。超文本传输协议是互联网上应用最为广泛的一种网络传输协议&#xff0c;所有的WWW文件都必须遵守这个标准。 Http 协…...

Acwing.91 最短Hamilton路径(动态规划)

题目 给定一张n个点的带权无向图&#xff0c;点从0~n-1标号&#xff0c;求起点0到终点n-1的最短Hamilton路径。Hamilton路径的定义是从0到n-1不重不漏地经过每个点恰好一次。 输入格式 第—行输入整数n。 接下来n行每行n个整数&#xff0c;其中第i行第j个整数表示点i到j的距…...

[hfut] [important] v4l2 vedio使用总结/opevx/ffpeg/v4l2/opencv/cuda

(158条消息) linux驱动camera//test ok_感知算法工程师的博客-CSDN博客 (158条消息) linux V4L2子系统——v4l2架构&#xff08;1&#xff09;之整体架构_感知算法工程师的博客-CSDN博客 (158条消息) linux V4L2子系统——v4l2的结构体&#xff08;2&#xff09;之video_devi…...

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现&#xff1a; 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…...

指令调度(Instruction Scheduling)

指令调度&#xff08;Instruction Scheduling&#xff09; 指令调度的约束基本机器模型基本块调度全局调度 指令调度是为了提高指令级并行&#xff08;ILP&#xff09;&#xff0c;对于超长指令字&#xff08;VLIW, Very Long Instruction Word&#xff09;和多发射系统&#x…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...