Spring Cloud Gateway详细介绍简单案例

文章目录

    • 1、Spring Cloud Gateway 详细介绍
      • 1.1. 统一入口(Single Entry Point)
      • 1.2. 请求路由(Request Routing)
      • 1.3. 负载均衡(Load Balancing)
      • 1.4. 流量控制(Rate Limiting)
      • 1.5. 身份认证(Authentication & Authorization)
      • 1.6. 协议转换(Protocol Translation)
      • 1.7. 系统监控(Monitoring & Logging)
      • 1.8. 安全防护(Security Protection)
    • 2、Spring Cloud Gateway的使用
      • 2.2. 两种gateway模式
      • 2.2. 使用案例需求
      • 2.3. 创建gateway模块
      • 2.4. 启动gateway模块
    • 3、配置路由规则
    • 4、启动多个服务进行测试

1、Spring Cloud Gateway 详细介绍

Spring Cloud Gateway 作为微服务架构的 API 网关,提供统一入口、请求路由、负载均衡、流量控制、身份认证、协议转换、系统监控、安全防护等功能,能够高效管理 API 请求流量,并提升系统的安全性和稳定性。

在这里插入图片描述

1.1. 统一入口(Single Entry Point)

微服务架构中,每个微服务都有自己的 API,直接暴露所有服务会导致维护困难、安全风险增加。

Spring Cloud Gateway 解决方案:

  • 通过单一网关,所有外部请求都必须先通过 API 网关,再路由到具体微服务。

  • 隐藏微服务细节,外部只需访问网关地址,不直接访问后端服务。

✅ 示例:配置 API 入口

spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/user/**- id: order-serviceuri: lb://order-servicepredicates:- Path=/order/**
  • /user/** 的请求被路由到 user-service

  • /order/** 的请求被路由到 order-service

  • 客户端只需要请求 API 网关,而无需知道后端微服务的实际地址。

1.2. 请求路由(Request Routing)

需要根据路径、请求头、参数等,动态转发到不同的微服务。

Spring Cloud Gateway 解决方案:

  • 基于 Path、Header、Query 参数等规则,智能路由。

✅ 示例:多种路由规则

routes:- id: auth-serviceuri: lb://auth-servicepredicates:- Path=/auth/**          # 按路径匹配- Method=POST            # 按请求方法匹配- Header=X-Device, Mobile  # 按请求头匹配
  • 路径规则:所有 /auth/** 请求都会转发到 auth-service。

  • 请求方法:仅支持 POST 请求。

  • 请求头规则:X-Device=Mobile 时才会匹配。

1.3. 负载均衡(Load Balancing)

单个微服务实例可能会过载,需要将流量分发到多个实例,提高可用性。

Spring Cloud Gateway 解决方案:

  • 内置 Spring Cloud LoadBalancer,支持基于服务注册中心(Eureka、Consul、Nacos)自动均衡流量。

✅ 示例:开启负载均衡

uri: lb://order-service
  • lb:// 表示启用负载均衡,请求会被分发到 order-service 的多个实例。

1.4. 流量控制(Rate Limiting)

突发流量可能导致服务崩溃,需要限制单个 IP 或用户的请求速率。

Spring Cloud Gateway 解决方案:

  • 基于 Redis 令牌桶算法,支持用户级、IP 级限流。

✅ 示例:限流配置

filters:- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 5   # 每秒 5 个请求redis-rate-limiter.burstCapacity: 10  # 最大 10 个请求
  • 每秒最多 5 个请求,超过速率的请求会被拒绝。

1.5. 身份认证(Authentication & Authorization)

需要确保只有合法用户可以访问微服务,防止未授权访问。

Spring Cloud Gateway 解决方案:

  • 集成 Spring Security + OAuth2/JWT 进行身份认证。

  • TokenRelay 机制,将身份验证信息传递给下游服务。

✅ 示例:JWT 认证

filters:- name: TokenRelay  # 自动转发 JWT Token
  • TokenRelay 过滤器 会自动从请求中提取 JWT 令牌,并传递给后端微服务进行身份验证。

1.6. 协议转换(Protocol Translation)

有些微服务可能只支持 HTTP 或 HTTPS,但客户端请求可能是 WebSocket、gRPC 等。

Spring Cloud Gateway 解决方案:

  • 支持 WebSocket 转发

  • 支持 HTTP 转 HTTPS

✅ 示例:WebSocket 转发

routes:- id: ws-routeuri: ws://localhost:9000predicates:- Path=/ws/**
  • /ws/** 开头的 WebSocket 请求会被转发到 localhost:9000。

1.7. 系统监控(Monitoring & Logging)

需要监控网关的流量情况、请求延迟、异常情况。

Spring Cloud Gateway 解决方案:

  • 结合 Spring Boot Actuator,提供健康检查、流量监控

  • 支持 Prometheus + Grafana 进行可视化监控

  • 支持 Zipkin/Jaeger 进行链路追踪

✅ 示例:开启 Actuator 监控

management:endpoints:web:exposure:include: gateway
  • 访问 /actuator/gateway/routes 可查看所有路由情况。

✅ 结合 Prometheus 进行监控

management:metrics:export:prometheus:enabled: true
  • 可在 Grafana 中展示流量数据。

1.8. 安全防护(Security Protection)

API 网关必须具备基础安全防护能力,防止恶意攻击。

Spring Cloud Gateway 解决方案:

  • 黑白名单过滤(基于 IP、用户角色)
  • 防止 SQL 注入、XSS
  • 请求加密(TLS/SSL)
  • 防止 DDoS 攻击(限流 + 认证)

示例:IP 访问控制

filters:- name: IpFilterargs:deny-lists: 192.168.1.100  # 禁止此 IP 访问
  • 可以防止恶意 IP 访问 API 网关。
  1. 结论
功能Spring Cloud Gateway 解决方案
统一入口通过网关管理所有微服务入口
请求路由按路径、请求头、参数等匹配路由
负载均衡内置 LoadBalancer,自动分流流量
流量控制令牌桶算法限流,防止过载
身份认证支持 JWT/OAuth2 认证
协议转换WebSocket 代理,HTTPS 转换
系统监控Actuator、Prometheus、Grafana
安全防护黑白名单、DDoS 防护

2、Spring Cloud Gateway的使用

2.2. 两种gateway模式

Spring Cloud Gateway 提供了两种模式来运行 API 网关:

  • Spring Cloud Gateway Reactive Server(基于 Spring WebFlux)

  • Spring Cloud Gateway Server MVC(基于 Spring MVC)

在这里插入图片描述

推荐使用第一种模式。

2.2. 使用案例需求

需求

  • 1.客户端发送 /api/order/**转到service-order
  • 2.客户端发送 /api/product/**转到 service-product
  • 3.以上转发有负载均衡效果

在这里插入图片描述

2.3. 创建gateway模块

在这里插入图片描述
引入依赖(这里同时需要引入nacos依赖)

    <dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies>

创建gateway主启动类:

package com.tigerhhzz.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** @Author tigerhhzz* @Date 2025 03 28 02 00**/
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayMainApplication {public static void main(String[] args) {System.out.println("--------GatewayMainApplication---------start successful!");SpringApplication.run(GatewayMainApplication.class,args);}
}

编写配置文件:
application.yml

spring:application:name: gatewaycloud:nacos:server-addr: 127.0.0.1:8848server:port: 80

2.4. 启动gateway模块

启动gateway主启动类,查看nacoa服务中心
在这里插入图片描述

3、配置路由规则

application.yml

spring:profiles:active:- routesapplication:name: gatewaycloud:nacos:server-addr: 127.0.0.1:8848server:port: 80

application-routes.yml

spring:cloud:gateway:routes:- id: order-routeuri: lb://service-orderpredicates:- Path=/api/order/**- id: product-routeuri: lb://service-productpredicates:- Path=/api/product/**

在每个控制器controller上加上配置文件中断言一致的路径

@RequestMapping("/api/order")@RequestMapping("/api/product")

4、启动多个服务进行测试

在这里插入图片描述

在这里插入图片描述
发送请求到order-service的两个服务,进行了负载均衡!!!

在这里插入图片描述


别害怕付出没有回报,那些看似平淡无奇的日子,都是成长的伏笔。


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

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

相关文章

Msys2安装编译Redis

此处注意文件夹的权限问题&#xff0c;将文件夹的只读属性取消&#xff0c;否则在编译的时候会提示没有权限。首先&#xff0c;进入 msys2 所在目录的 usr/include/ 下&#xff0c;找到 dlfcn.h &#xff0c;复制站贴做个备份。然后打开 dlfcn.h &#xff0c;找到 Dl_info定义的…

SHELL 三剑客

grep awk sed grep grep通常和管道符|一起使用&#xff0c;对管道符前面数据进行对应处理 其命令参数包括 -v 过滤指定内容 -i 不区分大小写 -c 统计匹配行号 -n 带行号可以参考下图数据 awk awk 简单来说awk就是把文件逐行的读入&#xff0c;以空格为默认分隔符将每行切…

【云原生】docker 搭建单机PostgreSQL操作详解

目录 一、前言 二、前置准备 2.1 服务器环境 2.2 docker环境 三、docker安装PostgreSQL过程 3.1 获取PostgreSQL镜像 3.2 启动容器 3.2.1 创建数据卷目录 3.2.2 启动pg容器 3.3 客户端测试连接数据库 四、创建数据库与授权 4.1 进入PG容器 4.2 PG常用操作命令 4.2…

645.错误的集合

import java.util.HashMap; import java.util.Map;/*** program: Test* description: 645 错误的集合* author: gyf* create: 2025-03-23 10:22**/ public class Test {public static void main(String[] args) {}public static int[] findErrorNums(int[] nums) {int[] arr n…

向量数据库学习笔记(2) —— pgvector 用法 与 最佳实践

关于向量的基础概念&#xff0c;可以参考&#xff1a;向量数据库学习笔记&#xff08;1&#xff09; —— 基础概念-CSDN博客 一、 pgvector简介 pgvector 是一款开源的、基于pg的、向量相似性搜索 插件&#xff0c;将您的向量数据与其他数据统一存储在pg中。支持功能包括&…

Unity编辑器功能及拓展(3) —[Attribute]特性

在 Unity 中&#xff0c;[Attribute]格式的特性是用于扩展编辑器功能、控制序列化行为和调整 Inspector 显示,进行编辑器拓展的核心工具。 一.基础编辑器拓展 1.基础序列化控制 1.[SerializeField] 强制显示私有变量到Inspector 2.[HideInInspector] 隐藏该字段在Inspect…

探究 CSS 如何在HTML中工作

2025/3/28 向全栈工程师迈进&#xff01; 一、CSS的作用 简单一句话——美化网页 <p>Lets use:<span>Cascading</span><span>Style</span><span>Sheets</span> </p> 对于如上代码来说&#xff0c;其显示效果如下&#xff1…

【docker】docker-compose安装RabbitMQ

docker-compose安装RabbitMQ 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09;2、启动mq3、访问mq4、查看服务器映射目录5、踩坑5.1、权限不足 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09; versi…

小红书xhs逆向算法还原(202503月更新)

今天闲着没事再来看下小红书&#xff0c;发现好像过不去了&#xff0c;解开base64看看 {"signSvn":"56","signType":"x2","appId":"xhs-pc-web","signVersion":"1","payload":&qu…

全国产1U机架式交换机解决方案

规格参数 基本参数信息 基本信息 端口规格 32个10/100/1000Base-T RJ45接口&#xff0c;8个1G/10Gig SFP Console管理端口&#xff0c;RJ45&#xff0c;数量&#xff1a;1 支持1个USB接口&#xff0c;1个复位按键 外形尺寸 482 mm&#xff08;长&#xff09; 300mm &#…

【8】递归之经典题型总结

&#x1f4da;博客主页&#xff1a;代码探秘者 ✨专栏&#xff1a;《JavaSe》 其他更新ing… ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;作者水平有限&#xff0c;欢迎各位大佬指点&…

JC4010快速入门

目录 一、硬件接线二、软件操作2.1、 设置2.2、 零点 校准2.3、闭环控制2.4、调整PI参数2.5、切换控制模式 三、CAN模块操作3.1、使用CANable3.2、发送指令3.3、其它 一、硬件接线 ZH1.5-6P 和 SH1.0-3P 端子定义如下&#xff1a; 红色接电源正极&#xff0c;黑色接电源负极&a…

基于Spring Boot的高校普法系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章&#xff1b; sfm重建的点云已经丢掉了尺度信息&#xff0c;并且坐标系跟图像数据有关(SFM初始化选择的图像)&#xff0c;所以如果想恢复物理真实尺度&#xff0c;以及在想要的视角下渲染&#xff0c;那么需要对尺度…

代码随想录day31 贪心part05

56.合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;in…

【MyBatis】MyBatis 操作数据库(入门)

文章目录 前言一、什么是MyBatis&#xff1f;二、MyBatis入门2.1、准备工作2.1.1 创建工程2.1.2、数据准备 2.2、配置数据库连接字符串2.3、写持久层代码2.4 单元测试 三、MyBatis的基础操作3.1 打印日志3.2、参数传递3.3、增(Insert)3.4、 删(Delete)3.5、改(Update)3.6、查(S…

蓝桥杯备考:多米诺骨牌

这道题要求上下方格子和之差要最小&#xff0c;其实就是算每个上下格子的差求和的最小值 这道题其实是动态规划01背包问题 我们直接按步骤做吧 step1:定义状态表示f[i][j]表示从1到i个编号的差值里选出刚好j个数的最小操作次数 step2:推导状态转移方程 如图这就是我们的状态…

bluecode-20240913_1_数据解码

时间限制&#xff1a;C/C 1000MS&#xff0c;其他语言 2000MS 内存限制&#xff1a;C/C 256MB&#xff0c;其他语言 512MB 难度&#xff1a;困难 数据解码 指定有一段经过编码的二进制数据&#xff0c;数据由0个或多个"编码单元"组成。"编码单元"的编码方式…

day1_Flink基础

文章目录 Flink基础今日课程内容目标为什么要学Flink技术更新迭代市场需求 流式计算批量计算概念特点 批量计算的优势和弊端流式计算生活中流场景流式计算的概念 Flink简介Flink历史Flink介绍 Flink架构体系已学过的框架技术Flink架构 Flink集群搭建Flink的集群模式Standalone模…

集多功能为一体的软件,支持批量操作。

今天我给大家分享一个超实用的小工具&#xff0c;真的是太好用了&#xff01;这个软件是吾爱大神无知灰灰制作的&#xff0c;它能直接一键把webp格式的图片转换成png格式。 webp转为png 一键操作&#xff0c;支持压缩 其实&#xff0c;作者最近在工作中经常遇到webp格式的图片…