路由规则的详细配置
除了路由的 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 时,路由规则才会匹配成功:
代码语言:javascript复制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:
代码语言:javascript复制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/**:
代码语言:javascript复制spring:
cloud:
gateway:
routes:
- id: service2
uri: http://localhost:8082
predicates:
- Path=/service2/**
- id: service1
uri: http://localhost:8081
predicates:
- Path=/service1/**
order: 0