Spring Cloud GateWay是Spring Cloud的⼀个全新项⽬,⽬标是取代Netflflix Zuul,它基于Spring5.0+SpringBoot2.0+WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官⽅测试,GateWay是Zuul的1.6倍,旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。
Spring Cloud GateWay不仅提供统⼀的路由⽅式(反向代理)并且基于 Filter(定义过滤器对请求过滤,完成⼀些功能) 链的⽅式提供了⽹关基本的功能,例如:鉴权、流量控制、熔断、路径重写、⽇志监控等。

GateWay核心概念

  • 路由(Route):网关最基础的部分,也是网关比较基础的工作单元。路由由一个ID、一个目标URL、一系列断言(匹配条件判断)和Filter过滤器组成
  • 断言(predicates):参考来Java8中的断言java.util.function.Predicate,开发人员可以匹配HTTP请求中的所有内容(包括请求头、请求参数等)
  • 过滤器(filter):一个标准的Spring webFilter,使用过滤器,可以在请求之前或者之后执行业务逻辑。

image.png

GateWay工作过程

image.png
客户端向Spring Cloud GateWay发出请求,然后在GateWay Handler Mapping中找到与请求相匹配的路由,将其发送到GateWay Web Handler;Handler再通过指定的过滤器链来将请求发送到我们实际的服务执⾏业务逻辑,然后返回。过滤器之间⽤虚线分开是因为过滤器可能会在发送代理请求之前(pre)或者之后(post)执⾏业务逻辑。
Filter在“pre”类型过滤器中可以做参数校验、权限校验、流量监控、⽇志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改、⽇志的输出、流量监控等。
GateWay核心逻辑:路由转发+执行过滤器链

GateWay路由规则详解

Spring Cloud GateWay帮我们内置了很多Predicates功能,实现了各种路由匹配规则(通过Header、请求参数等作为条件)匹配到对应的路由。
RoutePredicateFactory

  • DateTime时间类断言:根据请求时间在配置时间之前/之后/之间
  • Cookie类断言:指定Cookie正则匹配指定值
  • Header请求头类断言:指定Header正则匹配指定值/请求头中是否包含某个属性
  • Host请求主机类断言:请求Host匹配指定值
  • Method请求方式断言:请求Method匹配指定请求方式
  • Path请求路径类断言:请求路径正则匹配指定值
  • QueryParam请求参数类断言:查询参数正则匹配指定值
  • RemoteAddr远程地址类断言:请求远程地址匹配指定值

    GateWay动态路由

    GateWay支持自动从注册中心中获取服务列表并访问,即所谓的动态路由