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 的路由过滤器,用于将请求转发到目标地址。
相关推荐
程序员小明z5 分钟前
基于Java的药店管理系统
java·开发语言·spring boot·毕业设计·毕设
夜色呦15 分钟前
现代电商解决方案:Spring Boot框架实践
数据库·spring boot·后端
爱敲代码的小冰23 分钟前
spring boot 请求
java·spring boot·后端
2401_857600952 小时前
深入剖析:Spring MVC与Struts的较量
struts·spring·mvc
被猫枕的咸鱼2 小时前
springmvc通过使用map来进行数据的接收和使用
spring
李少兄2 小时前
解决 Spring Boot 中 `Ambiguous mapping. Cannot map ‘xxxController‘ method` 错误
java·spring boot·后端
荆州克莱2 小时前
Big Data for AI实践:面向AI大模型开发和应用的大规模数据处理套件
spring boot·spring·spring cloud·css3·技术
代码小鑫3 小时前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
_江南一点雨4 小时前
SpringBoot 3.3.5 试用CRaC,启动速度提升3到10倍
java·spring boot·后端
深情废杨杨4 小时前
后端-实现excel的导出功能(超详细讲解)
java·spring boot·excel