news 2026/4/3 20:04:42

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/4/2 12:05:10

es连接工具接入Kibana的完整示例

手把手教你打通 Kibana 与 Elasticsearch 的“任督二脉”你有没有遇到过这种情况&#xff1a;Kibana 启动了&#xff0c;页面也打开了&#xff0c;但一进去就提示“Unable to connect to Elasticsearch”&#xff1f;或者图表加载半天没反应&#xff0c;日志里一堆request time…

作者头像 李华
网站建设 2026/4/3 7:38:28

语音合成中的口音迁移可行性分析:GLM-TTS跨地域发音模拟

语音合成中的口音迁移可行性分析&#xff1a;GLM-TTS跨地域发音模拟 在虚拟主播能带货、AI配音可播新闻的今天&#xff0c;一个更“像人”的声音&#xff0c;早已不只是技术参数上的高保真。用户开始在意语气是否自然、语调有没有情绪起伏&#xff0c;甚至——这个声音是不是“…

作者头像 李华
网站建设 2026/3/31 5:44:11

模拟电子技术基础在振动传感器电荷放大中的实现路径

从微弱电荷到精准信号&#xff1a;如何用模拟电路“驯服”压电传感器工业现场的电机嗡鸣、桥梁在风中的轻微摆动、精密设备内部的微小振动……这些看似平静的现象背后&#xff0c;往往隐藏着关键的状态信息。要捕捉它们&#xff0c;离不开一种特殊的“耳朵”——压电式振动传感…

作者头像 李华
网站建设 2026/3/29 2:21:34

GLM-TTS能否支持手语同步生成?跨模态输出系统构想

GLM-TTS与手语同步生成&#xff1a;构建语音驱动的跨模态输出系统 在数字包容性日益受到重视的今天&#xff0c;听障群体的信息获取能力正成为衡量技术人文关怀的重要标尺。尽管AI语音合成已能生成媲美真人的自然语音&#xff0c;但对依赖视觉语言——手语的用户而言&#xff0…

作者头像 李华
网站建设 2026/3/27 6:58:02

⚡_延迟优化实战:从毫秒到微秒的性能突破[20260104164140]

作为一名专注于系统性能优化的工程师&#xff0c;我在过去十年中一直致力于降低Web应用的延迟。最近&#xff0c;我参与了一个对延迟要求极其严格的项目——金融交易系统。这个系统要求99.9%的请求延迟必须低于10ms&#xff0c;这个要求让我重新审视了Web框架在延迟优化方面的潜…

作者头像 李华
网站建设 2026/4/3 5:30:05

[特殊字符]_高并发场景下的框架选择:从性能数据看技术决策[20260104164650]

作为一名经历过无数生产环境考验的资深工程师&#xff0c;我深知在高并发场景下选择合适的技术栈是多么重要。最近我参与了一个日活千万级的电商平台重构项目&#xff0c;这个项目让我重新思考了Web框架在高并发环境下的表现。今天我要分享的是基于真实生产数据的框架性能分析&…

作者头像 李华