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


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

在这里插入图片描述


🐳结语

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

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

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

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

相关文章

linux NDK交叉编译rtmp 与 ffmpeg+rtmp交叉编译(v7a,v8a) 完成流程

最近在学RTMP,记录一下完成的编译流程 我是mac 电脑,但是mac上编译一直通过不了,后来才换到服务器上编译, 其实mac也能编译,只是最开始踩到坑里面了… 这里记录一下linux编译完整流程 环境: NDK: android-ndk-r17cFfmpeg: ffmpeg4.2.2 (高版本也可以编译)system: mac 1. …

【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

文章目录 一、Socket 套接字简介1、Socket 套接字概念2、Socket 套接字类型3、Socket 套接字使用步骤4、Socket 套接字服务端与客户端 二、Socket 服务端与客户端开发1、服务端2、客户端3、执行结果 一、Socket 套接字简介 1、Socket 套接字概念 Socket 套接字 是一种 进程之间…

什么是 web3?

在百度搜索引擎输入 “Web3”、“大厂”。跳出来基本都是这样的标题. 以及如今的互联网行业 “哀鸿遍野”&#xff0c;不仅内卷&#xff0c;还裁员。然后掀起一阵风&#xff0c;猛吹 Web3 的好&#xff0c;数据回归用户……最后再 “威逼利诱” 一下&#xff0c;Web3 就是 20 年…

剑指 Offer 37. 序列化二叉树 / LeetCode297. 二叉树的序列化与反序列化(二叉树遍历(深度优先搜索))

题目&#xff1a; 链接&#xff1a;剑指 Offer 37. 序列化二叉树&#xff1b;LeetCode 297. 二叉树的序列化与反序列化 难度&#xff1a;困难 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0…

LViT:语言与视觉Transformer在医学图像分割

论文链接&#xff1a;https://arxiv.org/abs/2206.14718 代码链接&#xff1a;GitHub - HUANGLIZI/LViT: This repo is the official implementation of "LViT: Language meets Vision Transformer in Medical Image Segmentation" (IEEE Transactions on Medical I…

MIPI D-PHY 2.1协议(学习笔记)

1~3 简介/术语/参考文档 这三章属于介绍性内容&#xff0c;包括缩略语等名词术语解释内容&#xff0c;不再赘述。 直接进入以下正文部分 4 D-PHY概述 D-PHY描述了一种Source同步、高速、低功耗、低成本的PHY&#xff0c;特别适用于移动应用。这个D-PHY规范主要是为了将相机…

Vue 中通用的 css 列表入场动画效果

css 代码 .gradientAnimation {animation-name: gradient;animation-duration: 0.85s;animation-fill-mode: forwards;opacity: 0; }/* 不带前缀的放到最后 */ keyframes gradient {0% {opacity: 0;transform: translate(-100px, 0px);}100% {opacity: 1;transform: translate…

Linux_CentOS_7.9部署Docker以及镜像加速配置等实操验证全过程手册

前言&#xff1a;实操之前大家应该熟悉一个新的名词DevOps 俗称开发即运维、新一代开发工程师&#xff08;Development和Operations的组合词&#xff09;是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#xff09;、技术运营和质量保障&…

合并 K 个升序链表——力扣23

题目描述 法一 顺序合并 class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2){ListNode* dummy new ListNode(-1); //创建一个新的头节点 ListNode *curdummy, *aPtr l1, *bPtr l2;while(aPtr && bPtr){if(aPtr->val < bPtr->…

版本适配好帮手 Android SDK Upgrade Assistant / Android Studio Giraffe新功能

首先是新版本一顿下载↓&#xff1a; Download Android Studio & App Tools - Android Developers 在Tools中找到Android SDK Upgrade Assistant 可以在此直接查看SDK升级相关信息&#xff0c;不用跑到WEB端去查看了。 例如看一下之前经常要对老项目维护的android 12蓝牙…

gitee中fork了其他仓库,如何在本地进行同步

GitHub 操作&#xff1a;同步 Fork 来的仓库&#xff08;上游仓库&#xff09;_sigmarising的博客-CSDN博客 1. 设置upstream 2. git pull --rebase 3. 然后再执行pull、push操作

神经数据库:用于使用 ChatGPT 构建专用 AI 代理的下一代上下文检索系统 — (第 2/3 部分)

书接上回理解构建LLM驱动的聊天机器人时的向量数据库检索的局限性 - &#xff08;第1/3部分&#xff09;_阿尔法旺旺的博客-CSDN博客 其中我们强调了&#xff08;1&#xff09;嵌入生成&#xff0c;然后&#xff08;2&#xff09;使用近似近邻&#xff08;ANN&#xff09;搜索…

Intellij IDEA有什么奇技淫巧?

IDEA全称 IntelliJIDEA&#xff0c;是java语言开发的集成环境&#xff0c;IntelliJ在业界被公认为最好的java开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、创新的GUI设计等方面的功能可以说是超常的。 idea下载…

index页面通过<script>引入根目录下的js文件后,vite打包项目后,项目中无js文件解决方法

解决方法&#xff1a; 根据打包报错提示&#xff0c;如图&#xff1a;即在<script>标签中加入&#xff1a;type&#xff0c;如图&#xff1a; 再打包 js文件就会被打包进去&#xff01;

水文监测软件 HYPACK 2023.2 Crack

HYPACK是由美国coastal海洋图像公司出品的一款世界知名的水文综合测量软件。它能够为勘测员提供了设计勘测、收集数据、处理数据、减少数据和生成最终产品所需的所有工具。从大地测量转换、测量设计、数据采集、数据后处理直到最终测量成图都实现了快速可靠&#xff0c;强大的绘…

六边形架构和分层架构的区别?

六边形架构和分层架构是什么&#xff1f; 六边形架构&#xff08;Hexagonal Architecture&#xff09;和分层架构&#xff08;Layered Architecture&#xff09;是两种常见的软件架构模式。六边形架构强调将核心业务逻辑与外部依赖解耦&#xff0c;通过接口与外部世界进行通信。…

一文让你彻底搞懂Mybatis之缓存机制

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 文章目录 一. 缓存是什么&#xff1f;二. 为什么要使用缓存&#xff1f;三. Mybatis中的缓存分哪几种&#…

MySql基本操作

在了解具体的MySql操作之前&#xff0c;我们需要了解一些基本的sql语句注意事项&#xff0c;如下所示&#xff1a; 每一条sql语句都需要以英文 ; 作为结尾&#xff1b;sql语句当中的关键字不区分大小写&#xff0c;不区分双引号和单引号&#xff1b;sql中库名称、表名称和字段…

Windows 不同方式打开的cmd/dos窗口属性配置不同

文章目录 1. 默认值&#xff08;控制台窗口&#xff09;属性2. "C:\Windows\System32\cmd.exe" 属性3. "命令提示符"属性4. 自定义某标题cmd窗口属性5. cmd快捷方式的属性总结 最近在写某个批处理脚本时&#xff0c;意外发现 Windows系统中&#xff0c;在不…

HBuilder 编辑器终端窗口无法输入,未响应的解决方案

HBuilder 编辑器终端窗口无法输入&#xff0c;未响应的解决方案 一、找到 HBuilder 安装目录 找到 main.js HBuilderX - plugins - builtincef3terminal - script - main.js 二、编辑 main.js 将 main.js 文件中的 powershell.exe 和 cmd.exe 路径都改为绝对路径 C:/Windows…