Spring Cloud Gateway
程序员文章站
2022-06-03 20:52:58
...
-
Spring Cloud Gateway 核心概念
路由(route):路由网关的基本构建块。它由一个 ID、一个目的 URI、一组谓词和一组过滤器定义。如果聚合谓词为真,则路由匹配。
断言(predicate): java 8中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是 Spring 5.0 框架中的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自于 http request 中的任何信息,比如请求头和参数等
过滤器(filter):一个标准的Spring webFilter。Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter.网关 Filter实例是由Spring 框架中的网关Filter的特殊工厂构造。request在转发到目前服务之前,response在返回到调用端之前都可以被修改或者自定义。
-
Spring Cloud Gateway 的十大路由断言工厂
uri 可以lb://开头(lb代表从注册中心获取服务),后面接的就是你需要转发到的服务名称
-
After 路由断言工厂
After Route Predicate Factory 中会取一个 UTC 时间格式的时间参数,当请求进来的时间在配置的 UTC 时间之后,则会匹配成功。spring: cloud: gateway: routes: - id: after_route uri: http://baidu.com predicates: - After=2019-05-02T22:30:15.854+8:00[Asia/Shanghai] # 其中 - After 的时间可以用以下代码生成 # String time = ZonedDateTime.now().format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
-
Before 路由断言工厂
Before Route Predicate Factory 中会取一个 UTC 时间格式的时间参数,当请求进来的时间在配置的 UTC 时间之前,则会匹配成功。spring: cloud: gateway: routes: - id: before_route uri: http://baidu.com predicates: - Before=2019-05-02T22:30:15.854+8:00[Asia/Shanghai]
-
Between 路由断言工厂
Between Route Predicate Factory 中会取一个 UTC 时间格式的时间参数,当请求进来的时间在配置的 UTC 时间之间,则会匹配成功。spring: cloud: gateway: routes: - id: between_route uri: http://baidu.com predicates: - Between= 2019-05-02T22:30:15.854+8:00[Asia/Shanghai], 2019-05-03T22:30:15.854+8:00[Asia/Shanghai] # 或者 predicates: - name: Between args: datetimee1: 2019-05-02T22:30:15.854+8:00[Asia/Shanghai] datetimee2: 2019-05-03T22:30:15.854+8:00[Asia/Shanghai]
-
Cookie 路由断言工厂
Cookie Route Predicate Factory 中会取两个参数——cookie名称对应的 key 和 value。当请求中携带的cookie 和 Cookied 断言工厂中配置的 cookie 一致,则路由匹配成功。spring: cloud: gateway: routes: - id: cookie_route uri: http://baidu.com predicates: - Cookie=chocolate, ch.p # 当设置 Cookie 为 chocolate=ch.p,可以成功将请求转发。
-
Header 路由断言工厂
Header Route Predicate Factory 根据配置的 header 信息进行断言匹配路由,匹配成功进行转发。spring: cloud: gateway: routes: - id: header_route uri: http://baidu.com predicates: - Header=X-Request-Id, xujin # 当设置 Cookie 为 chocolate=ch.p,可以成功将请求转发。 # 或者匹配正则表达式 - Header=X-Request-Id, \d+
-
Host 路由断言工厂
Host Route Predicate Factory 根据配置的 Host,对请求中的 Host 进行断言处理,断言成功进行转发。spring: cloud: gateway: routes: - id: host_route uri: http://baidu.com predicates: - Host=**.baidu.com:Gateway 的端口 # 并设置 hosts 设置本地的二级域名 vip.baidu.com 来解析到本地 ip 127.0.0.1
-
Method 路由断言工厂
Method Route Predicate Factory 接受一个参数:HTTP方法来匹配。spring: cloud: gateway: routes: - id: method_route uri: http://baidu.com predicates: - Method=GET
-
Path 路由断言工厂
Path Route Predicate Factory 接受一个参数:采用Spring PathMatcher 模式。spring: cloud: gateway: routes: - id: method_route uri: http://baidu.com predicates: - Path=/foo/{segment} # 这个路径将匹配,例如:/foo/1或/foo/bar。 # 或者可以使用/foo/**,匹配已foo为前缀的路径
-
Query 路由断言工厂
Query Route Predicate Factory 接受两个参数:一个必需的参数(param)和一个可选的表达式(regexp)。spring: cloud: gateway: routes: - id: query_route uri: http://baidu.com predicates: - Query=foo, baz # 匹配 foo=baz # 或者 - Query=foo 匹配如果请求包含一个 foo 查询参数。
-
RemoteAddr 路由断言工厂
RemoteAddr Route Predicate Factory 配置一个 IPv4 或 IPv6 网段的字符串或者 IP,当请求 IP 地址在网段之内或者和配置的 IP 相同,则表示匹配成功进行转发。例如 192.168.0.1/16 是一个网段,其中 192.168.0.1 是 IP 地址,16 是子网掩码(可匹配 192.168.0.10),也可以直接配置一个 IP。spring: cloud: gateway: routes: - id: method_route uri: http://baidu.com predicates: - RemoteAddr=127.0.0.1
-
-
Filter 过滤器