系列文章
Spring-Cloud-Gateway-01-网关基本概念
Spring-Cloud-Gateway-02-请求调用基本流程
Spring-Cloud-Gateway-03-网关自动装配
Spring-Cloud-Gateway-04-HttpWebHandlerAdapter到DispatcherHandler调用流程
Spring-Cloud-Gateway-05-请求到HttpWebHandlerAdapter的调用链路
Spring-Cloud-Gateway-06-DispatcherHandler调用解析
Spring-Cloud-Gateway-07-GatewayFilterChain的执行过程
Spring-Cloud-Gateway-08-路由的自动装配与加载流程
Spring-Cloud-Gateway-09-动态路由与自动刷新
执行流程图
spring cloud gateway 官网的流程图
具体流程图
核心概念
-
Gateway Client
向Spring Cloud Gateway
发送请求 - 请求首先会被
Netty
的服务端HttpServerHandle
处理 - 然后被
HttpWebHandlerAdapter
进行提取组装成网关上下文,组装ServerWebExchange类型的exchange对象;ServerWebExchange是一个HTTP请求-响应交互的契约。存放着重要的请求-响应属性、请求实例和响应实例,提供对HTTP请求和响应的访问,并公开额外的服务器端处理相关属性和特性,如请求属性等等,有点像Context
的角色。 - 接着网关的上下文会传递到
DispatcherHandler
,它负责将请求分发给RoutePredicateHandlerMapping
-
RoutePredicateHandlerMapping
负责路由查找,并根据路由断言判断路由是否可用 - 如果过断言成功,由
FilteringWebHandler
创建过滤器链并调用; - 这个handler在Gateway启动时会将所有的 GlobalFilter 构建一个
GatewayFilterAdapter
(内部类),而GatewayFilterAdapter对象仅持有GlobalFilter
接口方法,GatewayFilterAdapter对象在转换成OrderedGatewayFilter
后也持有了getOrder方法,根据getOrder方法的返回值顺序组成ArrayList。处理请求时会调用DefaultGatewayFilterChain
用来处理filter,DefaultGatewayFilterChain 类持有了filter链;整个过滤链都是在这个过滤器中进行的,过滤器的执行顺序由order决定。 - 通过特定于请求的
Fliter
链运行请求,Filter可以在发送代理请求之前(pre)和之后(post)运行逻辑 - 执行所有pre过滤器逻辑,然后进行代理请求;发出代理请求后,将运行post过滤器逻辑。
- 处理完毕之后将
Response
返回到Gateway
客户端
核心思想
当用户发出请求达到 GateWay
之后,会通过一些匹配条件,定位到真正的服务节点,并且在这个转发过程前后,进行一些细粒度的控制,其中 Predicate(断言) 是我们的匹配条件,Filter 是一个拦截器,有了这两点,再加上URL,就可以实现一个具体的路由,核心思想:路由转发+执行过滤器链
Route(路由) :构建网关的基础模块,由ID、目标URL、过滤器等组成
Predicate(断言) :开发人员可以匹配HTTP请求中的内容(请求头和请求参数),如果请求断言匹配则进行路由
Filter(过滤) :GateWayFilter的实例,使用过滤器,可以在请求被路由之前或者之后对请求进行修改
- Filter在pre类型的过滤器可以做参数效验、权限效验、流量监控、日志输出、协议转换等。
- Filter在post类型的过滤器可以做响应内容、响应头的修改、日志输出、流量监控等