news 2026/8/10 12:41:00

SpringCloud-06-Gateway网关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringCloud-06-Gateway网关

一、概述

1、简介

Gateway是在Spring生态系统之上构建的API网关服务,基于Spring6,Spring Boot 3和Project Reactor等技术。它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式,并为它们提供跨领域的关注点,例如:安全性、监控/度量和恢复能力。

注意:Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,SpringCloud最后自己研发了一个网关SpringCloud Gateway替代Zuul,那就是SpringCloud Gateway一句话:gateway是原zuul1.x版的替代。

2、功能

微服务中网关 Gateway 的具体工作内容如下所示。

  • 反向代理
  • 鉴权
  • 流量控制
  • 熔断
  • 日志监控

Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息,从而加强安全保护。

Spring Cloud Gateway本身也是一个微服务,需要注册进服务注册中心。

3、核心

Spring Cloud Gateway 服务网关由三大核心组成,分别是路由 Route、断言 Predicate 和过滤器 Filter。此三个核心的具体内容如下所示。

  • Route(路由):路由是服务网关的主要模块,它主要由 ID、目标 URL 、一系列的断言和过滤器组成。若断言为 true,则开始匹配路由。
  • Predicate(断言):参考的是 Java8 的 java.util.function.Predicate。开发人员可以匹配 HTTP 请求的所有内容(包括请求参数和请求头),若请求和断言匹配,则开始路由。
  • Filter(过滤):过滤是用于做功能增强的,指的是 Spring 框架中的 GatewayFilter 实例,使用过滤器,可以在请求之前或之后修改请求。

4、工作流程

核心逻辑:路由转发-断言判断-执行过滤器链

客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。

  • 过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(Pre)或之后(Post)执行业务逻辑。
  • 在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等;
  • 在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

二、简单入门

1、导入依赖

<!--gateway--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>

2、application.yml配置

server: port: 9527 spring: application: name: cloud-gateway #以微服务注册进consul或nacos服务列表内 cloud: consul: #配置consul地址 host: localhost port: 8500 discovery: prefer-ip-address: true service-name: ${spring.application.name} gateway: routes: - id: pay_routh1 #pay_routh1 #路由的ID(类似mysql主键ID),没有固定规则但要求唯一,建议配合服务名 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/pay/gateway/get/** # 断言,路径相匹配的进行路由 - After=2023-12-30T23:02:39.079979400+08:00[Asia/Shanghai] #- Cookie=username,zzyy # - Header=X-Request-Id, \d+ # 请求头要有X-Request-Id属性并且值为整数的正则表达式 #- Host=**.atguigu.com #- Query=username, \d+ # 要有参数名username并且值还要是整数才能路由 #- RemoteAddr=192.168.124.1/24 # 外部访问我的IP限制,最大跨度不超过32,目前是1~24它们是 CIDR 表示法。 - id: pay_routh2 #pay_routh2 #路由的ID(类似mysql主键ID),没有固定规则但要求唯一,建议配合服务名 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service predicates: - Path=/pay/gateway/info/** # 断言,路径相匹配的进行路由

3、常用的内置Route Predicate

Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理。

##id:我们自定义的路由ID,保持唯一
##uri:目标服务地址
##predicates:路由条件,Predicate接受一个输入参数返回一个布尔值。
##该属性包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)

Gateway断言详细博客https://blog.csdn.net/tuyong1972873004/article/details/107123238/

4、过滤器详解

Spring Cloud Gateway中的过滤器是用于拦截和处理HTTP请求的核心组件,分为GatewayFilter(局部过滤器)和GlobalFilter(全局过滤器)两类,实现鉴权、限流、日志记录、路径重写等功能,通过响应式编程模型确保高并发性能。‌‌

应用场景与最佳实践 ‌

核心场景‌: ‌

  • 安全控制‌:通过AuthFilter实现JWT鉴权,拦截未授权请求。‌ ‌
  • 流量管理‌:集成RateLimitGatewayFilter限制请求频率,防止服务过载。‌‌
  • 路径处理‌:使用StripPrefix移除路径前缀(如/admin/xxx→/xxx),提升可读性。‌

最佳实践‌: ‌

  • 性能优化‌:调整Event Loop线程数(-Dreactor.netty.ioWorkerCount=16),禁用DEBUG日志减少开销。‌‌
  • 监控集成‌:结合Prometheus监控关键指标(如gateway_requests_total),实现实时告警。‌‌
  • 错误处理‌:通过ErrorWebExceptionHandler统一捕获异常,增强系统健壮性。‌

Gateway过滤器详细博客https://cloud.tencent.com/developer/article/1900398

5、自定义断言,过滤器工厂,全局过滤器

自定义断言,过滤器工厂,全局过滤器https://blog.csdn.net/Decade_Faiz/article/details/139044394

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 11:42:46

如何用Scala语言构建类型安全的GLM-TTS客户端

如何用 Scala 构建类型安全的 GLM-TTS 客户端 在语音合成技术加速落地的今天&#xff0c;越来越多的应用场景——从虚拟主播到有声读物生成、从智能客服到方言保护——都对个性化、高保真语音输出提出了严苛要求。GLM-TTS 作为一款支持零样本语音克隆、情感迁移和音素级控制的大…

作者头像 李华
网站建设 2026/7/30 16:51:24

语音合成中的呼吸音模拟:增加拟人化自然感细节

语音合成中的呼吸音模拟&#xff1a;增加拟人化自然感细节 在虚拟主播深情讲述一个动人故事时&#xff0c;你是否曾被那句尾轻柔的喘息所打动&#xff1f;当游戏角色在激烈战斗后断续说出“我……还能继续”&#xff0c;那种真实的疲惫感从何而来&#xff1f;这些细节的背后&am…

作者头像 李华
网站建设 2026/8/9 3:41:11

全面讲解Keil5软件下载与注册激活流程

手把手带你搞定Keil5安装与激活&#xff1a;从零开始的嵌入式开发第一步 你是不是也曾在准备开启STM32开发之旅时&#xff0c;卡在了 Keil5怎么下载&#xff1f;怎么注册&#xff1f;为什么编译到一半报错“code size limited to 32KB”&#xff1f; 这些看似简单却让人抓狂…

作者头像 李华
网站建设 2026/7/31 11:37:52

语音克隆也能做SaaS?结合GPU资源售卖搭建TTS服务平台

语音克隆也能做SaaS&#xff1f;结合GPU资源售卖搭建TTS服务平台 在AIGC内容爆炸的今天&#xff0c;个性化语音正在从“可有可无”的附加功能&#xff0c;演变为数字内容的核心竞争力。无论是虚拟主播的一颦一笑&#xff0c;还是智能客服的语气起伏&#xff0c;用户对“像人一样…

作者头像 李华
网站建设 2026/7/30 7:50:01

【线性表系列进阶篇】手搓单向链表:从指针迷宫到代码实现

&#x1f3e0;个人主页&#xff1a;黎雁 &#x1f3ac;作者简介&#xff1a;C/C/JAVA后端开发学习者 ❄️个人专栏&#xff1a;C语言、数据结构&#xff08;C语言&#xff09;、EasyX、游戏、规划、程序人生 ✨ 从来绝巘须孤往&#xff0c;万里同尘即玉京 文章目录【线性表系列…

作者头像 李华
网站建设 2026/8/10 0:24:24

语音合成中的背景音乐叠加方案:GLM-TTS输出混音技巧

语音合成中的背景音乐叠加方案&#xff1a;GLM-TTS输出混音技巧 在短视频、播客、AI主播和在线教育内容爆发式增长的今天&#xff0c;单纯“能说话”的语音合成已经不够用了。用户期待的是更具沉浸感的声音体验——比如一段温柔叙述配上轻柔钢琴&#xff0c;或是一条激情广告搭…

作者头像 李华