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

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的两个服务,进行了负载均衡!!!

在这里插入图片描述


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


相关文章:

Spring Cloud Gateway详细介绍简单案例

文章目录 1、Spring Cloud Gateway 详细介绍1.1. 统一入口&#xff08;Single Entry Point&#xff09;1.2. 请求路由&#xff08;Request Routing&#xff09;1.3. 负载均衡&#xff08;Load Balancing&#xff09;1.4. 流量控制&#xff08;Rate Limiting&#xff09;1.5. 身…...

鸿蒙原生开发之状态管理V2

一、ArkTS状态变量的定义&#xff1a; State&#xff1a;状态&#xff0c;指驱动UI更新的数据。用户通过触发组件的事件方法&#xff0c;改变状态数据。状态数据的改变&#xff0c;引起UI的重新渲染。 在鸿蒙原生开发中&#xff0c;使用ArkTS开发UI的时候&#xff0c;我们可以…...

矩阵中对角线的遍历问题【C++】

1&#xff0c;按对角线进行矩阵排序 题目链接&#xff1a;3446. 按对角线进行矩阵排序 - 力扣&#xff08;LeetCode&#xff09; 【题目描述】 对于一个m*n的矩阵grid&#xff0c;要求对该矩阵进行 变换&#xff0c;使得变换后的矩阵满足&#xff1a; 主对角线右上的所有对角…...

Python小练习系列 Vol.4:迷宫寻路(回溯 + DFS)

&#x1f9e0; Python小练习系列 Vol.4&#xff1a;迷宫寻路&#xff08;回溯 DFS&#xff09; &#x1f6aa; 本期我们将探索一个二维世界&#xff0c;借助回溯算法帮助角色走出迷宫&#xff01;这是学习路径搜索类题目的经典案例。 &#x1f9e9; 一、题目描述 给定一个二维…...

[Lc4_dfs] 解数独 | 单词搜索

目录 1.解数独 题解 2.单词搜索 题解 1.解数独 链接&#xff1a;37. 解数独 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线…...

day17 学习笔记

文章目录 前言一、数组的增删改查1.resize函数2.append函数3.insert函数4.delete函数5.argwhere函数6.unique函数 二、统计函数1.amax&#xff0c;amin函数2.ptp函数3.median函数4.mean函数5.average函数6.var&#xff0c;std函数 前言 通过今天的学习&#xff0c;我掌握了num…...

自动语音识别(ASR)技术详解

语音识别&#xff08;Automatic Speech Recognition, ASR&#xff09;是人工智能和自然语言处理领域的重要技术&#xff0c;旨在将人类的语音信号转换为对应的文本。近年来&#xff0c;深度学习的突破推动语音识别系统从实验室走入日常生活&#xff0c;为智能助手、实时翻译、医…...

git | 版本切换的相关指令

常见指令 git log --oneline #查看历史提交 git tag latest-backup # 对当前的提交进行标记&#xff0c;标记名为latest-backup git checkout -b old-version 55b16aa # 切换到[55b16aa]的提交中&#xff0c;并标记为[old-version]的分支 git checkout master …...

19.OpenCV图像二值化

OpenCV图像二值化 图像二值化&#xff08;Binarization&#xff09;是图像预处理中的一种常用技术&#xff0c;其目的是将图像中的像素值分为两个类别——通常是“前景”和“背景”或者说0和255。二值化能够简化图像信息&#xff0c;为后续的形态学处理、边缘检测、目标识别等…...

通过Appium理解MCP架构

MCP即Model Context Protocol&#xff08;模型上下文协议&#xff09;&#xff0c;是由Anthropic公司于2024年11月26日推出的开放标准框架&#xff0c;旨在为大型语言模型与外部数据源、工具及系统建立标准化交互协议&#xff0c;以打破AI与数据之间的连接壁垒。 MCP架构与Appi…...

分享一个Pyside6实现web数据展示界面的效果图

今天又是有问题直接找DS的一天&#xff0c;每日一问&#xff0c;今天我的问题是“怎么将pyside6生成的界面转成web界面&#xff0c;使用python语言实现web界面”&#xff0c;等了一会&#xff0c;DS给我提供了两种方案&#xff0c;方案如下&#xff1a; 然后&#xff0c;让我们…...

FALL靶场通关攻略

1&#xff0c;下载好靶机后打开&#xff0c;通过kali扫描靶机ip和端口&#xff0c;得到靶机ip为192.168.50.144 2&#xff0c;扫描目录 3&#xff0c;访问靶机 4&#xff0c;访问扫描到的test.php,得到缺少GET请求参数的提示 5&#xff0c;使用FUZZ来扫出参数为file 6&#xff…...

Mybatis日志模块分析--适配器模式+代理模式

适配器模式 日志在我们开发过程中占据了一个非常重要的地位&#xff0c;是开发和运维管理之间的桥梁&#xff0c;在Java中的日志框架也非常多&#xff0c;Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等&#xff0c;这些工具对外的接口也都不尽相同&#xff0c;为…...

HTTP介绍以及(GET/POST/PUT/DELETE)应用介绍

WWW 是 “World Wide Web” 的缩写&#xff0c;中文名为 “万维网”。它是一个基于超文本和 HTTP 协议的全球性信息系统&#xff0c;通过互联网连接了世界各地的服务器和用户。用户可以使用浏览器访问各种网站&#xff0c;浏览网页、获取信息、进行交互等。 WWW 的核心技术包…...

圆球法线图,图生法线图 图片生成法线图

目录 圆球法线图 根据图片生成法线图 深度图计算法线图 圆球法线图 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D# 定义球体的参数 radius 1.0 resolution 100# 生成球体表面的点 u np.linspace(0, 2 * np.pi, resoluti…...

notepad++ 正则表达式

注意&#xff1a;Notepad正则表达式字符串最长不能超过69个字符 \ 转义字符 如&#xff1a;要使用 “\” 本身, 则应该使用“\\” \t Tab制表符 注&#xff1a;扩展和正则表达式都支持 \r 回车符CR 注&#xff1a;扩展支持&#xff0c;正则表达式不支持 \n 换行符…...

Java基于SpringBoot的网络云端日记本系统,附源码+文档说明

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

【自用记录】本地关联GitHub以及遇到的问题

最近终于又想起GitHub&#xff0c;想上传代码和项目到仓库里。 由于很早之前有在本地连接过GitHub&#xff08;但没怎么用&#xff09;&#xff0c;现在需要重新搞起&#xff08;操作忘得差不多&#xff09;。 在看教程实操的过程中遇到了一些小问题&#xff0c;遂记录一下。 前…...

页码设置相关问题记录

Q&#xff1a;中间没有显示页码怎么办&#xff1f; A&#xff1a;“页眉和页脚”-“页码”-“页面底端”-“普通数字2” Q&#xff1a;想让页码在某几节连续怎么办&#xff1f; A&#xff1a; ① 先保证节与节之间插入了“分节符”&#xff08;如何插入分节符和如何显示分节符…...

什么是数据集市

数据集市&#xff08;Data Mart&#xff09;是数据管理领域的核心概念&#xff0c;其定义为面向特定业务领域或用户群体的小型数据仓库子集&#xff0c;专注于部门级业务分析&#xff0c;具有快速响应、灵活部署等特点。以下从定义、特点、类型、结构、应用场景及与其他数据架构…...

Python 的未来:在多元变革中持续领跑

一、从工具到生态&#xff1a;Python 的核心优势筑牢发展根基 Python 自诞生以来&#xff0c;始终以 “简洁易用” 和 “跨界融合” 为标签&#xff0c;在技术快速迭代的时代展现出惊人的韧性。其核心竞争力不仅在于语法的直观性 —— 让开发者专注于逻辑实现而非语法细节&…...

【HC-05蓝牙模块】主要性能指标与通信基础知识

一、HC-05 基础学习视频 HC-05蓝牙串口通信模块调试与应用1 二、HC-05学习视频课件...

深度学习中的数据类型

1. NumPy 数组 (numpy.ndarray) 核心定位&#xff1a;科学计算的基础工具&#xff0c;处理数值多维数组。 特点&#xff1a; 高效数值运算&#xff1a;底层用 C 实现&#xff0c;适合数学计算&#xff08;如矩阵乘法、傅里叶变换&#xff09;。 内存连续存储&#xff1a;数据…...

如何缩短研发周期,降低研发成本?全星APQP软件为您提供解决方案

如何缩短研发周期&#xff0c;降低研发成本&#xff1f;全星APQP软件为您提供解决方案 一、 系统概述 全星研发管理APQP软件系统是一款专为产品研发和质量管控打造的智能化平台&#xff0c;旨在帮助企业高效推进APQP&#xff08;先期产品质量策划&#xff09;流程&#xff0c…...

嵌入式系统安全架构白皮书

嵌入式系统安全架构白皮书 一、安全威胁模型 1.1 典型攻击面分析 #mermaid-svg-mxWZ8IOtOmMv6YLV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mxWZ8IOtOmMv6YLV .error-icon{fill:#552222;}#mermaid-svg-mxWZ8I…...

MQTT之重复消息(5、TCP重连和MQTT重连)

目录 1. TCP 协议层的重传&#xff08;原生机制&#xff09; 2. 触发 TCP 重传的具体场景 3、TCP 重传的关键参数&#xff08;了解&#xff09; 第一、重传超时(RTO - Retransmission Timeout) 第二、重传次数 第三、累计时间 vs 本次 RTO 的区别 第四.常见问题解答 第…...

Github Webhook 以及主动式

Github配置 GitHub 默认支持两种 Content-Type: application/json application/x-www-form-urlencoded 特别要注意 Content-Type 我们选择: application/json Flask代码 import os import shutil import subprocess from flask import Flask, request, jsonifyapp = Fla…...

猜猜我用的是哪个大模型?我的世界游戏界面简单的模拟效果

我的罗里吧嗦的&#xff0c;根据小朋友的要求&#xff0c;边听边写边输入的提示词&#xff1a; 请生成一段完整的在网页中用html5和javascript代码模拟“我的世界”中游戏场景的互动画面&#xff0c;要求提供若干人物选项可以选择&#xff0c;请自行选择需要使用哪些库或框架来…...

基于龙芯3A5000处理器,全国产标准6U VPX板卡解决方案

1&#xff0c;产品功能 本产品为一款高可靠性的基于龙芯3A5000处理器以及 7A2000芯片组的标准6U VPX板卡&#xff0c;具有以太网、SATA、PCIE&#xff0c;以及显示等接口&#xff0c;产品功能框图如图1所示&#xff1a; 图1 系统框图 2&#xff0c;技术指标 序号 项目 指标…...

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

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