Spring Cloud Gateway使用的Webflux中的reactor-netty响应式编程组件,底层使用了netty通讯框架。gateway基于异步非阻塞模型上进行开发的。
作用:
- 反向代理:可匹配任何请求属性。
- 鉴权: 可以对路由指定Predicate(断言)和Filter(过滤)
- 流量控制
- 熔断:集成Hystrix的断路器功能
- 日志监控
位置:
网关的位置在负载均衡之后,在微服务入口之前
核心概念:
- 路由 route:构建网关的基本模块,它由ID、目标URI、一系列的断言和过滤器组成,如果断言为true则匹配该路由
- 断言 predicate:参考java8的java.util.function.Predicate. 开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数)。如果请求与断言相匹配则进行路由。
- 过滤 filter:指的是spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
工作流程:
客户端向gateway发送请求,然后在Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway web handler。
Handler再通过指定的过滤器链来将请求发送到实际的服务执行业务逻辑,然后返回。
过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前或之后执行业务逻辑。
Fliter在发送代理请求之前的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等。在发送代理请求之后的过滤器可以做相应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。