Spring Cloud Gateway Server WebFlux
5.0.1
章节总结
如何引入 Spring Cloud Gateway
要在项目中包含 Spring Cloud Gateway,请使用组 ID 为 org.springframework.cloud、工件 ID 为 spring-cloud-starter-gateway-server-webflux 的启动器。有关使用当前 Spring Cloud Release Train 设置构建系统的详细信息,请参阅 Spring Cloud 项目页面。
术语表
路由:网关的基本构建单元。它由ID、目标URI、一组断言和一组过滤器定义。如果聚合断言为真,则路由匹配。
工作原理
下图提供了 Spring Cloud Gateway 工作原理的高级概览:
配置路由断言工厂和网关过滤器工厂
有两种配置谓词和过滤器的方法:快捷方式和完全展开的参数。下面的大多数示例都使用快捷方式。
路由断言工厂
Spring Cloud Gateway 作为 Spring WebFlux HandlerMapping 基础设施的一部分进行路由匹配。Spring Cloud Gateway 包含许多内置的路由断言工厂。所有这些断言都匹配 HTTP 请求的不同属性。您可以通过逻辑 and 语句组合多个路由断言工厂。
GatewayFilter 工厂
38 个项目
全局过滤器
GlobalFilter 接口与 GatewayFilter 具有相同的签名。这些是特殊过滤器,有条件地应用于所有路由。
HttpHeadersFilters
HttpHeadersFilters 会在请求发送到下游之前应用于这些请求,例如在 NettyRoutingFilter 中。
TLS 与 SSL
网关可以通过遵循常规的Spring服务器配置来监听HTTPS请求。以下示例展示了如何实现:
HttpClientCustomizer
spring-cloud-gateway 中的 HttpClientCustomizer 接口允许对网关使用的 HTTP 客户端进行自定义。它提供了一个单一方法 customize,该方法接收一个 HttpClient 作为参数,并返回其自定义版本。
配置
Spring Cloud Gateway 的配置由一组 RouteDefinitionLocator 实例驱动。以下清单展示了 RouteDefinitionLocator 接口的定义:
路由元数据配置
你可以通过使用元数据为每个路由配置额外的参数,如下所示:
HTTP 超时配置
所有路由的HTTP超时(响应和连接)均可配置,并可为每个特定路由单独覆盖。
Fluent Java Routes API
为了在Java中实现简单配置,RouteLocatorBuilder bean 包含了一个流畅的 API。以下清单展示了其工作原理:
DiscoveryClient 路由定义定位器
你可以配置网关,使其基于在兼容 DiscoveryClient 的服务注册中心注册的服务来创建路由。
Reactor Netty 访问日志
要启用 Reactor Netty 访问日志,请设置 -Dreactor.netty.http.server.accessLogEnabled=true。
CORS 配置
你可以配置网关来控制全局或每个路由的 CORS 行为。两者提供相同的配置选项。
Actuator API
/gateway 执行器端点允许您监控和与 Spring Cloud Gateway 应用程序进行交互。默认情况下,/gateway 执行器端点的访问权限是禁用的。要启用该端点,您需要在应用程序属性中将其访问权限设置为 read-only 或 unrestricted,并通过 HTTP 或 JMX 将其公开。以下清单展示了如何操作:
在多个 Gateway 实例之间共享路由
Spring Cloud Gateway 提供了两种 RouteDefinitionRepository 实现。第一种是 InMemoryRouteDefinitionRepository,它仅存在于单个 Gateway 实例的内存中。这种类型的 Repository 不适合在多个 Gateway 实例之间同步路由。
故障排除
本节涵盖了使用 Spring Cloud Gateway 时可能出现的常见问题。
开发者指南
以下是编写网关自定义组件的基础指南。
AOT 与原生镜像支持
自 4.0.0 版本起,Spring Cloud Gateway 支持 Spring AOT 转换和原生镜像。
配置属性
要查看所有 Spring Cloud Gateway 相关配置属性的列表,请参阅附录。