Spring Cloud Gateway 响应式服务器
4.2.0
章节总结
📄️ 如何包含 Spring Cloud Gateway
要在项目中包含 Spring Cloud Gateway,请使用组 ID 为 org.springframework.cloud 和 artifact ID 为 spring-cloud-starter-gateway 的 starter。有关使用当前 Spring Cloud Release Train 设置构建系统的详细信息,请参阅 Spring Cloud Project 页面。
📄️ 术语表
路由(Route):网关的基本构建块。它由一个 ID、一个目标 URI、一组断言(predicates)和一组过滤器(filters)定义。如果聚合断言为真,则路由匹配。
📄️ 工作原理
下图提供了 Spring Cloud Gateway 工作原理的高级概述:
📄️ 配置路由断言工厂和网关过滤器工厂
有两种方式可以配置谓词和过滤器:快捷方式和完全展开的参数。下面的大多数示例都使用快捷方式。
📄️ 路由断言工厂
Spring Cloud Gateway 作为 Spring WebFlux HandlerMapping 基础设施的一部分进行路由匹配。Spring Cloud Gateway 包含许多内置的路由断言工厂。所有这些断言都基于 HTTP 请求的不同属性进行匹配。你可以通过逻辑 and 语句将多个路由断言工厂组合在一起。
🗃️ GatewayFilter Factories
38 个项目
📄️ 全局过滤器
GlobalFilter 接口与 GatewayFilter 具有相同的签名。这些是特殊过滤器,有条件地应用于所有路由。
📄️ HttpHeadersFilters
HttpHeadersFilters 在将请求发送到下游之前应用于请求,例如在 NettyRoutingFilter 中。
📄️ TLS 和 SSL
网关可以通过遵循常见的 Spring 服务器配置来监听 HTTPS 请求。以下示例展示了如何实现这一点:
📄️ HttpClientCustomizer
HttpClientCustomizer 接口位于 spring-cloud-gateway 中,允许对网关使用的 HTTP 客户端进行自定义。它提供了一个方法 customize,该方法接收一个 HttpClient 作为参数,并返回其自定义版本。
📄️ 配置
Spring Cloud Gateway 的配置由一组 RouteDefinitionLocator 实例驱动。以下清单展示了 RouteDefinitionLocator 接口的定义:
📄️ 路由元数据配置
你可以通过使用元数据为每个路由配置额外的参数,如下所示:
📄️ HTTP 超时配置
可以为所有路由配置 HTTP 超时(响应和连接),并为每个特定路由进行覆盖。
📄️ 流畅的 Java 路由 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 应用程序进行交互。要使其能够远程访问,必须在应用程序属性中启用并通过 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 相关的配置属性列表,请参阅附录。