【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,一经查实,立即删除!

相关文章

在CSDN学Golang云原生(Docker基础)

一&#xff0c;docker安装配置 要在golang中使用Docker&#xff0c;需要先安装并配置好Docker。下面是基本的Docker安装和配置步骤&#xff1a; 下载并安装Docker 官方下载地址&#xff1a;https://docs.docker.com/get-docker/ 根据你的操作系统选择对应版本的Docker&…

Clash-Github git clone 或者 git push 特别慢的解决办法

1.在本地上使用 SSH 命令无法git push 上传 github 项目 2.使用 git clone 下载项目特别慢总是加载不了 解决办法 将 Clash 的连接模式换成&#xff1a;Direct 后面再找找能不能再Global 下解决该问题

C#使用LINQ查询操作符实例代码(二)

目录 六、连表操作符 1、内连接2、左外连接(DefaultIfEmpty)3、组连接七、集合操作 八、分区操作符 1、Take()&#xff1a;2、TakeWhile()&#xff1a;3、Skip()&#xff1a;4、SkipWhile()&#xff1a;九、聚合操作符 1、Count&#xff1a; 返回集合项数。 2、LongCount&…

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…

ubuntu 20.04添加双网卡后,访问外网不通

原因 在机器上插了一个智能网卡后&#xff0c;在netplan中设置了静态IP&#xff0c;如下&#xff1a; cat /etc/netplan/01-network-manager-all.yaml # Let NetworkManager manage all devices on this system network:version: 2renderer: NetworkManagerethernets:eth1:d…

Cloud Kernel SIG 月度动态:支持龙芯和申威架构,合入两个内存新特性

Cloud Kernel SIG&#xff08;Special Interest Group&#xff09;&#xff1a;支撑龙蜥内核版本的研发、发布和服务&#xff0c;提供生产可用的高性价比内核产品。 01 SIG 整体进展 Cloud Kernel 开始支持龙芯和申威架构。 合入两个内存新特性&#xff1a;MEMCG LRU LOCK 和…

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…

【点选验证码】生成点选验证码图片--多进程

import os from concurrent.futures import ThreadPoolExecutor #定义了一个线程池 from multiprocessing import Pool #---------------------进程from tqdm import tqdm from PIL import Image, ImageDraw, ImageFont, ImageOps import shutil,os import numpy as np impor…

Redis基础

常用中间件Redis详解 一、Redis概述 1.2、NoSQL 1、什么是NoSQL Not Only SQL &#xff1a;不仅仅是sql&#xff0c;泛指非关系型数据库 。 NoSQL不依赖于业务逻辑方式存储&#xff0c;而以简单的key—value 模式存储。大大增加了扩展能力 2、NoSQL特点 方便扩展&#x…

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->…

随手笔记——记录SLAM下各种库提供的重要函数

随手笔记——记录SLAM下各种库提供的重要函数 说明明细1.SVD分解&#xff08;Eigen&#xff09;2.HXb求解&#xff08;Eigen&#xff09; 说明 记录常用库提供的类、方法等 明细 1.SVD分解&#xff08;Eigen&#xff09; // SVD on W Eigen::JacobiSVDEigen::Matrix3d svd(…

版本适配好帮手 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蓝牙…

go学习 6、方法

6、方法 面向对象编程&#xff08;OOP&#xff09;&#xff0c;封装、组合。 6.1 方法声明 在函数声明时&#xff0c;在其名字之前放上一个变量&#xff0c;即是一个方法。这个附加的参数会将该函数附加到这种类型上&#xff0c;即相当于为这种类型定义了一个独占的方法。 …

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

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