Gateway

Gateway | 简介

  • Spring Cloud Gateway 是 Spring 官方提供的 API 网关;
  • Gateway 是基于 Spring5 和 Springboot2 做开发的;
  • Gateway 是基于 Netty 开发的异步调用网关;

Gateway | 特性

  • 提供动态路由和限流等措施;
  • 提供了易于编写的 Predicate 和 Filter,提供了良好的扩展性;
  • 提供了 Discovery 和 Hystrix 的集成;

Gateway | 架构图

Gateway 架构图.png

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 重定向