基本参数
Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个组件,它提供了一种基于路由和过滤器的方式来处理请求。
-
路由(Route): Spring Cloud Gateway 基于路由来将请求转发到不同的目标地址。路由定义了请求的匹配规则以及目标地址。每个路由都由 ID、URI、Predicate 和 Filter 组成。URI 指定了请求转发的目标地址,Predicate 定义了请求匹配的规则,Filter 则是对请求进行处理的过滤器。
-
断言(Predicate): 断言用于匹配请求的条件。Spring Cloud Gateway 提供了多种预定义的断言,比如基于路径、方法、Header、Host 等进行匹配。用户也可以根据自己的需求编写自定义的断言。
-
过滤器(Filter): 过滤器用于在请求被转发到目标地址之前或之后对请求进行处理。Spring Cloud Gateway 内置了多种过滤器,用于实现请求的各种处理逻辑,比如添加 Header、修改请求体、记录请求日志等。用户也可以编写自定义的过滤器来实现特定的处理逻辑。
-
HandlerMapping: Spring Cloud Gateway 使用 HandlerMapping 将请求映射到对应的路由上。HandlerMapping 根据请求的 URL 和方法等信息,匹配到对应的路由,并将请求转发给该路由。
-
WebHandler: WebHandler 是 Spring Web 中的概念,它用于处理请求。Spring Cloud Gateway 中的 WebHandler 负责接收请求,并根据路由信息将请求转发到目标地址。
-
路由动态更新: Spring Cloud Gateway 支持动态更新路由配置。用户可以通过配置中心(比如 Spring Cloud Config)或者其他方式动态更新路由配置,而不需要重启应用程序。
-
异步非阻塞处理: Spring Cloud Gateway 基于 Reactor 提供了异步非阻塞的处理模型,能够处理大量并发请求而不会阻塞线程。
核心源码
-
核心源码:
RouteDefinition
:定义了路由的相关信息,包括 ID、URI、断言和过滤器。RouteLocator
:路由定位器接口,用于根据请求信息获取对应的路由。RoutePredicateHandlerMapping
:路由断言处理器映射,根据请求的信息匹配对应的路由。GatewayFilter
:网关过滤器接口,定义了过滤器的执行逻辑。GlobalFilter
:全局过滤器接口,用于在请求处理的不同阶段执行过滤逻辑。GatewayHandlerAdapter
:网关处理器适配器,用于执行路由转发和过滤器处理逻辑。RouteRefreshListener
:路由刷新监听器,用于监听路由配置的变化并更新路由信息。
-
执行过程:
- 当接收到一个请求时,首先会通过
RoutePredicateHandlerMapping
根据请求信息匹配对应的路由。 - 匹配到路由后,会获取该路由的相关信息,包括目标 URI、断言和过滤器。
- 根据目标 URI 将请求转发到目标地址。
- 在请求转发过程中,会依次执行路由所定义的过滤器,对请求进行处理,比如添加 Header、修改请求体等。
- 过滤器的执行顺序由路由配置的顺序决定。
- 最终将处理后的请求发送到目标地址,并将响应返回给客户端。
- 当接收到一个请求时,首先会通过
-
核心逻辑分析:
- 路由匹配:通过路由断言器逐一匹配请求的条件,直到找到匹配的路由。
- 过滤器执行:根据路由配置的顺序,依次执行对应路由的过滤器逻辑,对请求进行处理。
- 路由转发:根据路由配置的目标 URI,将请求转发到目标地址。
- 异步处理:Spring Cloud Gateway 基于 Reactor 提供了异步非阻塞的处理模型,在处理请求时不会阻塞线程。
执行过程
在 Spring Cloud Gateway 3.1.7 中,当收到一个请求时,它将经过以下核心类,并进行相应的处理:
-
DispatcherHandler:
- 当收到一个 HTTP 请求时,首先会被 DispatcherHandler 接收。
- DispatcherHandler 是 Spring Web 中的核心处理器,负责将请求分发到对应的处理器(Handler)进行处理。
-
GatewayHttpHandlerAdapter:
- DispatcherHandler 将请求分发给 GatewayHttpHandlerAdapter。
- GatewayHttpHandlerAdapter 是 Spring Cloud Gateway 中的 HTTP 请求处理适配器,负责将请求转发给 GatewayHttpHandler。
-
GatewayHttpHandler:
- GatewayHttpHandler 是 Spring Cloud Gateway 中的 HTTP 请求处理器,负责处理 GatewayHttpHandlerAdapter 分发过来的请求。
- 它会调用 RoutePredicateHandlerMapping 进行路由匹配。
-
RoutePredicateHandlerMapping:
- RoutePredicateHandlerMapping 是 Spring Cloud Gateway 中负责路由匹配的组件。
- 它会根据请求的信息和路由定义的断言逐一匹配,找到匹配的路由。
-
RouteHandlerMapping:
- RouteHandlerMapping 是 Spring Cloud Gateway 中的路由处理器映射组件。
- 当找到匹配的路由后,RoutePredicateHandlerMapping 会将请求交给 RouteHandlerMapping 进行处理。
-
GatewayFilterHandler:
- GatewayFilterHandler 负责执行过滤器链,将请求依次经过所有过滤器的处理。
- 过滤器会对请求进行各种处理,比如添加 Header、修改请求体等。
-
NettyRoutingFilter:
- NettyRoutingFilter 是 Spring Cloud Gateway 中的一个核心过滤器,负责将请求转发到目标地址。
- 它使用 Netty 客户端进行请求的转发,并处理请求的响应。
-
WebClientHttpRoutingFilter:
- WebClientHttpRoutingFilter 是 Spring Cloud Gateway 中基于 WebClient 的路由过滤器,用于将请求转发到目标地址。