spring cloud gateway 最新版4.0.4 翻译中文版(1-4章)

该项目是基于Spring生态系统构建的API网关,包括Spring 6、Spring Boot 3和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为它们提供跨领域的关注点,例如:安全性、监控/指标和弹性。

1. 如何使用Spring Cloud Gateway

要在您的项目中包含Spring Cloud Gateway,使用组ID为org.springframework.cloud和Artifact ID为spring-cloud-starter-gateway的starter。有关在当前Spring Cloud Release Train中设置构建系统的详细信息,请参见Spring Cloud Project页面。

如果您包含了starter,但不想启用网关,请设置spring.cloud.gateway.enabled=false

Spring Cloud Gateway是在Spring Boot、Spring WebFlux和Project Reactor上构建的。因此,当您使用Spring Cloud Gateway时,许多熟悉的同步库(例如Spring Data和Spring Security)和模式可能不适用。如果您对这些项目不熟悉,我们建议您先阅读其文档以熟悉一些新概念,然后再使用Spring Cloud Gateway。

Spring Cloud Gateway需要由Spring Boot和Spring Webflux提供的Netty运行时。它不适用于传统Servlet容器或构建为WAR时。

2. 术语表

  • 路由(Route):网关的基本构建块。它由一个ID、一个目标URI、一组谓词和一组过滤器定义。如果聚合谓词为true,则匹配路由。
  • 谓词(Predicate):这是一个Java 8函数谓词。输入类型为Spring Framework的ServerWebExchange。这使您可以在HTTP请求中的任何内容上进行匹配,例如标题或参数。
  • 过滤器(Filter):这些是使用特定工厂构建的GatewayFilter实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。

3. 工作原理

下图提供了Spring Cloud Gateway的工作原理概述:
spring cloud gateway 最新版4.0.4 翻译中文版(1-4章)_第1张图片

大家可以根据上述流程图,更好地理解 Spring Cloud Gateway 的工作流程。以客户端发起请求为例,Spring Cloud Gateway 会首先将请求与路由进行匹配,如果匹配成功,则将请求发送至网关 Web 处理器。在此后的请求处理过程中,会根据请求的具体情况选择性地应用一系列过滤器,其中,前置过滤器的代码逻辑会在请求被代理之前执行,而后置过滤器的代码逻辑则会在代理请求返回后执行,对请求的响应结果进行加工处理。这种设计可以实现请求和响应的全面管理和控制,让 Spring Cloud Gateway 成为一个强大和灵活的网关工具。

如果在路由中定义的 URI 没有指定端口号,则默认情况下,HTTP URI 的端口将被设置为 80,而 HTTPS URI 的端口将被设置为 443。例如,对于以下路由:

- id: myroute
  uri: http://example.com
  predicates:
  - Path=/myroute

在这个例子中,由于 URI 没有指定端口号,Spring Cloud Gateway 将为该路由分配默认端口 80。在客户端发起请求时,请求 URL 将被解析为 http://example.com:80/myroute。这意味着,通过 Spring Cloud Gateway 访问的目标服务将通过默认端口进行通信,这对于大多数基于 HTTP 和 HTTPS 协议的服务都是适用的。如果需要连接到其他端口上运行的目标服务,则需要在路由中明确指定端口号。

4. 配置路由谓词工厂和网关过滤器工厂

这段话提到了两种配置路由断言工厂和网关过滤器工厂的方法:快捷方式和完全展开的参数。大多数以下的示例都使用了快捷方式。
在每个部分的第一两句话中,会将名称和参数名称列为代码。其中,参数通常按照快捷配置所需的顺序进行列出。这种方式可以方便快捷地配置路由断言和过滤器,同时也支持更加自由的参数展开方式,让开发者根据具体需要进行灵活组合和配置。需要注意的是,快捷方式虽然方便,但在某些场景下可能会受到限制,比如某些特定的需求可能需要特殊处理,则会需要借助完全展开参数的方式进行配置。

4.1. 快捷配置

快捷配置使用过滤器名称,后跟等号 (=),后跟由逗号 (,) 分隔的参数值。
例如,在以下示例中:

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - Cookie=mycookie,mycookievalue

使用了 Cookie 路由断言工厂,并定义了两个参数:cookie 名称为 mycookie,待匹配的值为 mycookievalue。
此种方式可以方便地定义路由断言工厂和过滤器工厂,节省配置代码,提升配置效率。同时,快捷方式还支持在同一路由中配置多个断言和过滤器,以实现更加灵活的路由配置。

4.2. 完全展开的参数

完全展开的参数配置更像是标准的 yaml 配置方式,其中包含名称/值对。通常会有一个名称键和一个参数键 (args)。参数键是一个映射,包含用于配置路由断言工厂或过滤器工厂的键值对。
例如,在以下示例中:

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - name: Cookie
          args:
            name: mycookie
            regexp: mycookievalue

定义了完全展开参数的 Cookie 路由断言工厂配置,其中包含两个参数:name 为 mycookie,regexp 为 mycookievalue。与快捷配置相比,完全展开参数方式可以让配置更加清晰明了,并且能够提供更加灵活的配置选项,满足复杂业务场景下的需求。

你可能感兴趣的:(java,spring,spring,cloud)