news 2026/1/31 4:28:25

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/1/30 8:54:06

语音合成中的静音间隔控制:精确调节句子之间的停顿时长

语音合成中的静音间隔控制&#xff1a;精确调节句子之间的停顿时长 在智能语音助手越来越频繁地出现在我们生活中的今天&#xff0c;你是否曾注意到——有些AI读出的内容听起来像“念稿机”&#xff0c;而另一些却仿佛真人娓娓道来&#xff1f;差别往往不在发音清晰度&#xff…

作者头像 李华
网站建设 2026/1/28 19:18:11

多模态感知融合算法详解:自动驾驶核心要点

多模态感知融合&#xff1a;自动驾驶的“眼睛”是如何炼成的&#xff1f; 你有没有想过&#xff0c;一辆没有司机的车&#xff0c;是怎么“看”清这个世界&#xff0c;并安全地穿行于车流之中的&#xff1f; 它不像人类只靠一双眼睛——它有 摄像头 来识别红绿灯的颜色&…

作者头像 李华
网站建设 2026/1/25 3:20:50

使用Swagger文档化GLM-TTS的RESTful API接口便于团队协作

使用Swagger文档化GLM-TTS的RESTful API接口便于团队协作 在语音AI技术日益渗透到客服、教育、内容创作等领域的今天&#xff0c;一个高效的TTS&#xff08;文本转语音&#xff09;系统不仅需要强大的模型能力&#xff0c;更需要良好的工程封装与协作机制。GLM-TTS作为支持零样…

作者头像 李华
网站建设 2026/1/30 5:29:15

GLM-TTS与ELK栈结合:构建完整的日志分析与故障排查系统

GLM-TTS与ELK栈结合&#xff1a;构建完整的日志分析与故障排查系统 在智能语音服务逐渐成为人机交互核心入口的今天&#xff0c;一个看似微小的合成失败或延迟飙升&#xff0c;都可能引发用户体验的断崖式下滑。尤其是在大模型驱动的TTS&#xff08;文本转语音&#xff09;系统…

作者头像 李华
网站建设 2026/1/27 4:55:12

基于GLM-TTS的语音导航地图应用开发:实时路径指引播报

基于GLM-TTS的语音导航地图应用开发&#xff1a;实时路径指引播报 在一辆高速行驶的新能源汽车中&#xff0c;导航系统轻声提醒&#xff1a;“前方300米右转进入长安街&#xff0c;注意避让行人。”声音熟悉得如同家人在旁叮嘱——这并不是预录语音&#xff0c;也不是传统TTS生…

作者头像 李华
网站建设 2026/1/30 8:20:51

基于GLM-TTS的无障碍阅读工具开发:为视障用户生成语音内容

基于GLM-TTS的无障碍阅读工具开发&#xff1a;为视障用户生成语音内容 在数字信息爆炸的时代&#xff0c;视障人群的信息获取依然面临巨大挑战。尽管屏幕朗读器和电子有声书已普及多年&#xff0c;但大多数系统仍停留在“能听”的层面——机械的语调、频繁误读的地名术语、千篇…

作者头像 李华