Gateway | 简介
- Spring Cloud Gateway 是 Spring 官方提供的 API 网关;
- Gateway 是基于 Spring5 和 Springboot2 做开发的;
- Gateway 是基于 Netty 开发的异步调用网关;
Gateway | 特性
- 提供动态路由和限流等措施;
- 提供了易于编写的 Predicate 和 Filter,提供了良好的扩展性;
- 提供了 Discovery 和 Hystrix 的集成;
Gateway | 架构图
Gateway | Predicate
Predicate 使用
- Predicate 是路由匹配规则,满足条件即可触发路由;
- Predicate 可以进行自定义,满足个性化要求;
- Spring Cloud Gateway 预置了很多 Predicate;
自定义 Predicate
- 写一个类继承 AbstractRoutePredicateFactory,泛型指定了用来装 application.yml 中参数值的是哪个类;
- 这个类的名字必须以 RoutePredicateFactory 为结尾,RoutePredicateFactory 之前的内容就是 application.yml 中 predicates 的 key;
- shortcutFieldOrder 方法指明了,application.yml 中的参数值存储在泛型类中的哪个属性;
- apply 方法,实现了匹配规则;请求来了,如果配这个类的规则匹配到了,就代理到其 uri 指定的地方去;
预定义 Predicate
类型 | 作用 | 入参 |
---|---|---|
After | 在该日期之后发生的请求都将被匹配 | 日期时间 |
Before | 在该日期时间之前的请求都将被匹配 | 日期时间 |
Between | datetime1 和 datetime2 | 日期时间、日期时间 |
Cookie | 请求包含次 cookie 名称且正则表达式为真的将会被匹配 | cookie 名称和正则表达式 |
Header | 请求包含次 header 名称且正则表达式为真的将会被匹配 | header 名称和正则表达式 |
Host | 使用 Ant 路径匹配规则,. 做分隔符 | host name 列表 |
Method | 需要匹配的 HTTP 请求方式 | HTTP Method 字符串 |
Path | 判断请求路径是否满足要求 | Path 表达式和可选标识 |
Gateway | Filter
- Filter 可以对 Request 进行请求过滤处理;
- Gateway 的 Filter 分为全局和局部两种;
Gateway | 自定义全局 Filter
- 实现接口 GlobalFilter,Ordered;
- 注入 IoC 中就行;
Gateway | 自定义局部 Filter
- 继承 AbstractGatewayFilterFactory,和自定义 Predicate 一样;
- 注入 IoC;
Gateway | 预置全局 Filter
类型 | 作用 |
---|---|
LoadBalancerClientFilter | 负载均衡过滤器 |
NettyRoutingFilter | 默认使用 Netty 的底层 |
RouteToRequestUrlFilter | 新的请求路由 |
WebSocketRoutingFilter | websocket 路由 |
GatewayMetricsFilter | 路由监控,配合 spring-boot-starer-actuator |
Gateway | 预置局部 Filter
类型 | 作用 |
---|---|
AddRequestHeader | 添加请求 Header |
AddRequestParameter | 添加请求参数 |
AddResponseHeader | 添加响应 header |
DedupeResponseHeader | 响应头去重 |
HystrixGatewayFilters | 断路器的网关 |
PrefixPath | 路径匹配 |
PreserveHostHeader | 发送原始 host |
RequestRateLimiter | 限流 |
RedirectTo | 重定向 |