news 2026/7/13 21:07:50

微服务架构--gateway要做的事情

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微服务架构--gateway要做的事情

了解gateway

我们从4个角度去理解
1.对搭建部署,架构层面有一定量的理解
2.理解gateway提供的一整套知识体系
3.gateway在实际项目中,需要整合的其他的技术栈
4.gateway在实际项目中的,灵活使用

1.对搭建部署,架构层面有一定量的理解
1.创建一个springboot,然后引入gateway的依赖
2.在yaml中给配置

2.理解gateway提供的一整套知识体系
之前的文章,详细介绍过springmvc
要把住住springmvc
就要深刻理解,他是http请求包,到java能理解实体类,这一层做的,机制的设计
我们回顾一下springmvc有哪些机制
1.controller接口机制,包括文件的
2.拦截器机制
3.r响应
4.全局异常处理

他都是处理请求与响应的机制

这里springmvc的局限在哪里呢
他无法处理把请求分发给不同的springboot的机制的机制
springmvc版本升级了,我记得是有使用netty作为收发请求的底层原理的

所以核心还是这个分配机制

我们看看gateway提供了哪些机制

路由机制
断言机制
过滤器机制:
自定义全局异常处理器:

我们顺着你提供的思路,从四个角度来深入了解一下 Spring Cloud Gateway。

1. 搭建部署与架构:轻量入门与响应式内核

搭建一个 Gateway 服务非常简单,它本身就是一个 Spring Boot 应用。

快速搭建步骤:

  1. 创建项目:创建一个新的 Spring Boot 模块。
  2. 引入依赖:在pom.xml中添加核心依赖spring-cloud-starter-gateway注意,需要排除默认的spring-boot-starter-web依赖,因为 Gateway 是基于 WebFlux 的,两者会冲突。
  3. 简单配置:在application.yml中配置路由规则。例如,将路径为/api/user/**的请求转发到http://localhost:8081

核心架构:响应式编程模型
这是 Gateway 与 Spring MVC 最根本的区别。Gateway 基于Spring WebFlux构建,底层使用Netty作为异步非阻塞的网络通信框架。

  • 对比 Spring MVC:Spring MVC 基于 Servlet API,是同步阻塞的。每个请求会占用一个线程直到处理完毕,在高并发下,线程资源会成为瓶颈。
  • Gateway 的优势:Netty 和 Reactor 的响应式模型,使其能用少量线程处理大量并发请求,显著提升系统的吞吐量。在相同硬件条件下,WebFlux 版本的 QPS(每秒查询数)可比 MVC 版本提升30%-50%,内存使用降低20%-30%

因此,你之前提到的“使用 Netty 作为收发请求的底层原理”是准确的,这也正是 Gateway 高性能的关键。

2. Gateway 的知识体系:路由、断言与过滤器

Gateway 的知识体系围绕三个核心概念构建,你可以将它们类比为 Spring MVC 中的DispatcherServlet、拦截器和控制器的组合,但功能更强大。

  • Route(路由):网关的基本构建模块。它由ID、目标URI断言(Predicate)集合和过滤器(Filter)集合组成。
  • Predicate(断言):匹配条件。Java 8 中的Predicate函数式接口,用于判断请求是否满足某个条件。Gateway 内置了丰富的断言工厂,如Path(路径匹配)、Method(请求方法)、Header(请求头匹配)等。一个路由可以配置多个断言,必须全部满足才能匹配。
  • Filter(过滤器):处理逻辑。在请求被路由前后对请求或响应进行修改。分为两种:
    • GatewayFilter:作用于单个特定路由。
    • GlobalFilter:作用于所有路由,是全局性的。

工作流程

  1. 客户端请求到达 Gateway。
  2. Gateway Handler Mapping根据请求信息,通过Predicate断言匹配找到对应的Route
  3. 请求进入Gateway Web Handler,它会触发该路由关联的一系列Filter(称为 Pre-Filters),对请求进行预处理。
  4. 请求被转发到目标 URI 指向的后端服务。
  5. 后端服务返回响应后,响应会再次经过 Filter 链(称为 Post-Filters)进行处理。
  6. 最终,响应返回给客户端。

3. 实际项目中的技术整合

Gateway 通常不是孤立运行的,在实际项目中需要与微服务架构中的其他组件紧密整合。

  • 服务注册与发现(如 Nacos, Eureka):Gateway 需要从注册中心获取所有后端服务的实例列表,实现动态路由。配置uri: lb://service-name,Gateway 就会自动使用负载均衡器将请求分发到service-name服务的可用实例上。
  • 配置中心(如 Nacos, Spring Cloud Config):将路由规则等配置外部化,可以实现路由规则的热更新,无需重启网关即可生效。
  • 熔断与限流(如 Sentinel, Hystrix):Gateway 可以集成熔断器,当下游服务故障时,快速失败并返回友好提示,防止故障扩散。同时,内置的限流功能可以保护系统免受突发流量冲击。
  • 链路追踪(如 Sleuth + Zipkin):Gateway 作为流量的入口,是分布式追踪的关键节点,可以为每个请求生成 Trace ID,方便追踪请求在微服务间的完整调用链。

4. 实际项目中的灵活使用

基于以上能力,Gateway 在项目中可以实现很多强大的功能。

  • 统一鉴权:编写一个GlobalFilter,拦截所有请求,验证 JWT Token 或 Session 的有效性。这是最经典的用法。
  • 灰度发布 / 金丝雀发布:通过自定义断言或过滤器,实现精细化的流量控制。
    • 流量染色:在 Gateway 过滤器里根据用户 ID、请求头等给请求打上标签(如在 Header 中添加version: v2)。
    • 灰度路由:根据请求的“染色”标签,将其路由到不同的服务版本。例如,使用Weight断言,将 10% 的流量导向新版本服务。
  • 请求/响应转换:使用过滤器统一修改请求或响应的格式。例如,为所有请求添加一个公用的 API 版本号 Header,或者统一封装响应体的结构。
  • 跨域处理:通过配置CorsWebFilter,集中解决前后端分离架构中的跨域问题,避免在每个微服务中单独配置。
  • 自定义全局异常处理:正如你提到的,这是保证系统一致性的关键。由于 Gateway 是 WebFlux 环境,不能使用 Spring MVC 的@ControllerAdvice。你需要通过继承AbstractErrorWebExceptionHandler来实现自定义的全局异常处理,以返回统一格式的错误信息。

总的来说,理解 Gateway 的关键在于把握住它“响应式、非阻塞”的架构本质,以及“路由、断言、过滤器”这三个核心概念。在实际项目中,它通过与其他基础设施(如注册中心、配置中心)整合,成为微服务架构中统一的流量入口和治理中心。

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

AI Agent 面试题 668:Agent输出安全过滤的策略和实现方案有哪些?

🔥 AI Agent 面试题 668:Agent输出安全过滤的策略和实现方案有哪些?摘要:本文深入解析了「Agent输出安全过滤的策略和实现方案有哪些?」这一 AI Agent 领域的核心面试题。文章从 输出安全过滤 的基本概念出发&#xff…

作者头像 李华
网站建设 2026/7/13 21:06:17

日志-log4j2日志框架源码

正文一. Logger获取通常,使用Slf4j的LoggerFactory获取Log4j2的Logger的代码如下所示。private static final Logger logger_log4j2 LoggerFactory.getLogger(LearnLog4j2.class);跟进LoggerFactory的getLogger()方法,如下所示。public static Logger ge…

作者头像 李华
网站建设 2026/7/13 21:04:32

深度解析SRT协议:如何在不可靠的UDP上构建可靠流媒体传输

目录 背景 一、为什么需要SRT?—— TCP与UDP的两难困境 二、SRT协议的核心原理 2.1 架构模型 2.2 核心机制一:基于序列号的ARQ与选择性重传 2.3 核心机制二:延迟窗口与发送/接收缓冲区 2.4 核心机制三:自适应拥塞控制 三、…

作者头像 李华
网站建设 2026/7/13 21:02:34

OCRmyPDF终极指南:一键将扫描PDF变为可搜索文档的深度解析

OCRmyPDF终极指南:一键将扫描PDF变为可搜索文档的深度解析 【免费下载链接】OCRmyPDF OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched 项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF 想象一下这样的场景…

作者头像 李华
网站建设 2026/7/13 20:56:28

Ultimate Vocal Remover 5.6:AI音频分离的终极免费解决方案

Ultimate Vocal Remover 5.6:AI音频分离的终极免费解决方案 【免费下载链接】ultimatevocalremovergui GUI for a Vocal Remover that uses Deep Neural Networks. 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui 想要从歌曲中…

作者头像 李华
网站建设 2026/7/13 20:56:20

终极指南:如何在10分钟内使用AtlasOS解决Windows网络故障问题

终极指南:如何在10分钟内使用AtlasOS解决Windows网络故障问题 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and usability. 项目地址: https://gitcode.com/GitHub_Trendi…

作者头像 李华