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 的路由过滤器,用于将请求转发到目标地址。
相关推荐
RainbowSea31 分钟前
问题:后端由于字符内容过长,前端展示精度丢失修复
java·spring boot·后端
C1829818257533 分钟前
OOM电商系统订单缓存泄漏,这是泄漏还是溢出
java·spring·缓存
风象南1 小时前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
我是一只代码狗1 小时前
springboot中使用线程池
java·spring boot·后端
hello早上好1 小时前
JDK 代理原理
java·spring boot·spring
PanZonghui2 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
沉着的码农2 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
zyxzyx6662 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
何苏三月2 小时前
SpringCloud系列 - Sentinel 服务保护(四)
spring·spring cloud·sentinel
纳兰青华2 小时前
bean注入的过程中,Property of ‘java.util.ArrayList‘ type cannot be injected by ‘List‘
java·开发语言·spring·list