一、Gateway
是什么:SpringCloud Gateway 是SpringCloud 的一个全新项目,基于Spring 5.0 +Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。
优势:在 SpringCloud 2.0以上版本中,没有对新版本的zuul 2.0 以上最新高性能版本进行集成,仍然还是使用的zuul 1.x 非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway 是基于 WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
作用:SpringCloud Gateway的目标是提供统一的路由方式且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
SpringCloud Gateway 的特性
1. 基于Spring Framework 5,Project Reactor和SpringBoot 2.0 进行沟通;
2. 动态路由:能够匹配任何请求属性;
3. 可以对路由制定Predicate(断言)和Filter(过滤器);
4. 集成Hystrix的断路器功能;
5. 集成SpringCloud服务发现功能;
6. 易于编写的Predicate(断言)和Filter(过滤器);
7. 请求限流功能;
8. 支持路径重写;
三大概念:
Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由;
Predicate(断言):开发人员可以匹配HTTP请求中的所有内容(例如请求头或者请求参数),如果请求与断言相匹配则进行路由;
Filter(过滤器):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
Gateway工作流程:
① 客户端向 SpringCloud Gateway 发送请求。然后再Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到Gateway WebHandler。
② Handler 再通过制定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。(过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑)
③ Filter 在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型得过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等重要操作。
Route Predicate Factories是什么?
SpringCloud Gateway 将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。它包括了许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个Route Predicate工厂可以进行组合。
SpringCloud Gateway 创建Route 对象时,使用RoutePredicateFactory创建Predicate对象,Predicate对象可以赋值给Route。 SpringCloud Gateway 包含许多内置的Route Predicate Factories。
GatewayFilter Factories是什么?
路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。SpringCloud Gateway 内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生。
作用:全局日志/统一网关鉴权...