Spring Cloud Gateway 原理

基本参数

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个组件,它提供了一种基于路由和过滤器的方式来处理请求。

  1. 路由(Route): Spring Cloud Gateway 基于路由来将请求转发到不同的目标地址。路由定义了请求的匹配规则以及目标地址。每个路由都由 ID、URI、Predicate 和 Filter 组成。URI 指定了请求转发的目标地址,Predicate 定义了请求匹配的规则,Filter 则是对请求进行处理的过滤器。

  2. 断言(Predicate): 断言用于匹配请求的条件。Spring Cloud Gateway 提供了多种预定义的断言,比如基于路径、方法、Header、Host 等进行匹配。用户也可以根据自己的需求编写自定义的断言。

  3. 过滤器(Filter): 过滤器用于在请求被转发到目标地址之前或之后对请求进行处理。Spring Cloud Gateway 内置了多种过滤器,用于实现请求的各种处理逻辑,比如添加 Header、修改请求体、记录请求日志等。用户也可以编写自定义的过滤器来实现特定的处理逻辑。

  4. HandlerMapping: Spring Cloud Gateway 使用 HandlerMapping 将请求映射到对应的路由上。HandlerMapping 根据请求的 URL 和方法等信息,匹配到对应的路由,并将请求转发给该路由。

  5. WebHandler: WebHandler 是 Spring Web 中的概念,它用于处理请求。Spring Cloud Gateway 中的 WebHandler 负责接收请求,并根据路由信息将请求转发到目标地址。

  6. 路由动态更新: Spring Cloud Gateway 支持动态更新路由配置。用户可以通过配置中心(比如 Spring Cloud Config)或者其他方式动态更新路由配置,而不需要重启应用程序。

  7. 异步非阻塞处理: Spring Cloud Gateway 基于 Reactor 提供了异步非阻塞的处理模型,能够处理大量并发请求而不会阻塞线程。

核心源码

  1. 核心源码:

    • RouteDefinition:定义了路由的相关信息,包括 ID、URI、断言和过滤器。
    • RouteLocator:路由定位器接口,用于根据请求信息获取对应的路由。
    • RoutePredicateHandlerMapping:路由断言处理器映射,根据请求的信息匹配对应的路由。
    • GatewayFilter:网关过滤器接口,定义了过滤器的执行逻辑。
    • GlobalFilter:全局过滤器接口,用于在请求处理的不同阶段执行过滤逻辑。
    • GatewayHandlerAdapter:网关处理器适配器,用于执行路由转发和过滤器处理逻辑。
    • RouteRefreshListener:路由刷新监听器,用于监听路由配置的变化并更新路由信息。
  2. 执行过程:

    • 当接收到一个请求时,首先会通过 RoutePredicateHandlerMapping 根据请求信息匹配对应的路由。
    • 匹配到路由后,会获取该路由的相关信息,包括目标 URI、断言和过滤器。
    • 根据目标 URI 将请求转发到目标地址。
    • 在请求转发过程中,会依次执行路由所定义的过滤器,对请求进行处理,比如添加 Header、修改请求体等。
    • 过滤器的执行顺序由路由配置的顺序决定。
    • 最终将处理后的请求发送到目标地址,并将响应返回给客户端。
  3. 核心逻辑分析:

    • 路由匹配:通过路由断言器逐一匹配请求的条件,直到找到匹配的路由。
    • 过滤器执行:根据路由配置的顺序,依次执行对应路由的过滤器逻辑,对请求进行处理。
    • 路由转发:根据路由配置的目标 URI,将请求转发到目标地址。
    • 异步处理:Spring Cloud Gateway 基于 Reactor 提供了异步非阻塞的处理模型,在处理请求时不会阻塞线程。

执行过程

在 Spring Cloud Gateway 3.1.7 中,当收到一个请求时,它将经过以下核心类,并进行相应的处理:

  1. DispatcherHandler:

    • 当收到一个 HTTP 请求时,首先会被 DispatcherHandler 接收。
    • DispatcherHandler 是 Spring Web 中的核心处理器,负责将请求分发到对应的处理器(Handler)进行处理。
  2. GatewayHttpHandlerAdapter:

    • DispatcherHandler 将请求分发给 GatewayHttpHandlerAdapter。
    • GatewayHttpHandlerAdapter 是 Spring Cloud Gateway 中的 HTTP 请求处理适配器,负责将请求转发给 GatewayHttpHandler。
  3. GatewayHttpHandler:

    • GatewayHttpHandler 是 Spring Cloud Gateway 中的 HTTP 请求处理器,负责处理 GatewayHttpHandlerAdapter 分发过来的请求。
    • 它会调用 RoutePredicateHandlerMapping 进行路由匹配。
  4. RoutePredicateHandlerMapping:

    • RoutePredicateHandlerMapping 是 Spring Cloud Gateway 中负责路由匹配的组件。
    • 它会根据请求的信息和路由定义的断言逐一匹配,找到匹配的路由。
  5. RouteHandlerMapping:

    • RouteHandlerMapping 是 Spring Cloud Gateway 中的路由处理器映射组件。
    • 当找到匹配的路由后,RoutePredicateHandlerMapping 会将请求交给 RouteHandlerMapping 进行处理。
  6. GatewayFilterHandler:

    • GatewayFilterHandler 负责执行过滤器链,将请求依次经过所有过滤器的处理。
    • 过滤器会对请求进行各种处理,比如添加 Header、修改请求体等。
  7. NettyRoutingFilter:

    • NettyRoutingFilter 是 Spring Cloud Gateway 中的一个核心过滤器,负责将请求转发到目标地址。
    • 它使用 Netty 客户端进行请求的转发,并处理请求的响应。
  8. WebClientHttpRoutingFilter:

    • WebClientHttpRoutingFilter 是 Spring Cloud Gateway 中基于 WebClient 的路由过滤器,用于将请求转发到目标地址。
相关推荐
摇滚侠6 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 32
spring boot·笔记·后端
步行cgn8 小时前
@Configuration 详解:Spring 配置类的核心注解
java·后端·spring
卓怡学长14 小时前
w210基于springboot反诈平台设计与实现
java·spring boot·spring·intellij-idea
大模型丫丫15 小时前
如何提升单体 Spring Boot 应用的并发数?
java·spring boot·后端
RuoyiOffice16 小时前
SpringBoot3+Vue3 最推荐的开源 OA 系统 2026:流程驱动、资源闭环、多端互通
spring boot·vue3·flowable·oa·协同办公·spring boot 3·开源oa
计算机毕设定制辅导-无忧学长16 小时前
基于Spring Boot的玄幻小说个性化推荐平台设计与实现
java·vue.js·spring boot·后端·mysql·推荐算法
Harry Lei16 小时前
长期记忆系统的设计与实现
spring boot·postgresql·embedding
YOU OU17 小时前
Spring Cloud Consul
spring cloud·consul·java-consul
大模型码小白18 小时前
ChatGPT 的回答也能被结构化抓取?AI Bot Scraper 对比测评
服务器·开发语言·数据库·人工智能·spring·chatgpt
1001101_QIA18 小时前
从 CPU 到 GPU:高速缓存、指令并行与 CUDA 执行原理入门
java·后端·spring