zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Spring Cloud Gateway配置路由规则(二)

2023-06-13 09:18:24 时间

路由规则的详细配置

除了路由的 ID 和目标 URI 之外,Spring Cloud Gateway 还支持多种其他的路由配置选项。下面我们将逐一介绍这些选项。

predicates

predicates 部分定义了路由匹配规则。Spring Cloud Gateway 支持多种不同的匹配规则,可以根据请求的路径、Host、Method、Header、Cookie 等信息来进行路由匹配。

以下是常见的路由匹配规则:

  • Path:基于请求的路径进行匹配。可以使用 Ant 风格的通配符,如 /user/**、/user/{id} 等。
  • Host:基于请求的 Host 进行匹配。可以使用 Ant 风格的通配符,如 *.example.com。
  • Method:基于请求的 HTTP 方法进行匹配。
  • Header:基于请求的 Header 进行匹配。可以匹配特定的 Header 值,如 X-Forwarded-For=192.168.1.1。
  • Query:基于请求的 Query String 进行匹配。可以匹配特定的参数值,如 foo=bar。

predicates 部分可以包含多个匹配规则,它们之间是与的关系。例如,下面的配置表示只有当请求的路径以 /api 开头,同时包含参数名为 foo,且参数值为 bar 时,路由规则才会匹配成功:

spring:
  cloud:
    gateway:
      routes:
        - id: my-route
          uri: http://localhost:8080
          predicates:
            - Path=/api/**
            - Query=foo=bar

filters

filters 部分定义了路由过滤器。路由过滤器是 Spring Cloud Gateway 中非常重要的一部分,它可以用于修改请求和响应、添加头信息、限流等。Spring Cloud Gateway 内置了多个过滤器,同时也支持自定义过滤器。

以下是常见的路由过滤器:

  • AddRequestHeader:添加请求头信息。
  • AddResponseHeader:添加响应头信息。
  • RewritePath:重写请求路径。
  • Hystrix:添加 Hystrix 断路器支持。
  • Retry:添加重试支持。
  • RateLimiter:添加限流支持。

filters 部分可以包含多个过滤器,它们之间是顺序执行的。例如,下面的配置表示先添加一个请求头信息 X-Request-Id,然后再将请求路径重写为 /api:

spring:
  cloud:
    gateway:
      routes:
        - id: my-route
          uri: http://localhost:8080
          predicates:
            - Path=/old-api/**
          filters:
            - AddRequestHeader=X-Request-Id,123
            - RewritePath=/old-api/(?<path>.*),/api/${path}

在上述配置中,首先会添加一个请求头信息 X-Request-Id,值为 123;然后将请求路径重写为 /api/{path},其中 {path} 是一个路径变量,它会被替换为原始请求路径中的内容。

order

order 属性用于定义路由规则的优先级。如果没有指定 order 属性,路由规则的优先级将按照它们在配置文件中出现的顺序来确定。如果指定了 order 属性,优先级将按照它的值来确定,数值越小的路由规则优先级越高。

例如,下面的配置中,路由规则 /service1/** 的优先级高于 /service2/**:

spring:
  cloud:
    gateway:
      routes:
        - id: service2
          uri: http://localhost:8082
          predicates:
            - Path=/service2/**
        - id: service1
          uri: http://localhost:8081
          predicates:
            - Path=/service1/**
          order: 0