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 的路由过滤器,用于将请求转发到目标地址。
相关推荐
9i编程20 分钟前
5.Nacos 配置中心化改造与短信 Debug 模式动态切换实践
后端·spring cloud
二宝哥2 小时前
创建Gradle多模块SpringBoot项目
java·spring boot·后端
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第156题】【06_Spring篇】第16题:Spring 用到了哪些设计模式?
java·spring·设计模式·代理模式·工厂模式
杨运交3 小时前
[044][Web模块]基于 Google Authenticator 的 TOTP 双因素认证框架设计与实现
spring boot
二宝哥4 小时前
springboot项目使用Gradle工具实现依赖版本控制
java·spring boot·后端·gradle·版本
一路向北North5 小时前
Spring Security OAuth2.0(16):密码模式
java·后端·spring
卓怡学长5 小时前
w273基于springboot的智能笔记的开发与应用
java·spring boot·spring·intellij-idea
Kyrie_Li16 小时前
Spring Boot Kafka 生产级配置全解析:从入门到精通
spring boot·后端·kafka
无心水19 小时前
【全域智能营销实战】2、Spring AI 模块化架构深度解读:从 1.0 到 2.0 的演进与最佳实践
人工智能·spring·架构·harness·顶尖架构师·全域智能营销·harmess
livemetee1 天前
【关于Spring声明式事务】
java·后端·spring