系列文章

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 官网的流程图

springcloud curl 向服务器发送post请求动态刷新配置文件 404 springcloud请求流程_spring cloud

具体流程图

springcloud curl 向服务器发送post请求动态刷新配置文件 404 springcloud请求流程_spring_02



核心概念

  1. Gateway ClientSpring Cloud Gateway 发送请求
  2. 请求首先会被Netty的服务端HttpServerHandle处理
  3. 然后被HttpWebHandlerAdapter 进行提取组装成网关上下文,组装ServerWebExchange类型的exchange对象;ServerWebExchange是一个HTTP请求-响应交互的契约。存放着重要的请求-响应属性、请求实例和响应实例,提供对HTTP请求和响应的访问,并公开额外的服务器端处理相关属性和特性,如请求属性等等,有点像 Context 的角色。
  4. 接着网关的上下文会传递到 DispatcherHandler ,它负责将请求分发给 RoutePredicateHandlerMapping
  5. RoutePredicateHandlerMapping 负责路由查找,并根据路由断言判断路由是否可用
  6. 如果过断言成功,由FilteringWebHandler 创建过滤器链并调用;
  7. 这个handler在Gateway启动时会将所有的 GlobalFilter 构建一个GatewayFilterAdapter(内部类),而GatewayFilterAdapter对象仅持有GlobalFilter接口方法,GatewayFilterAdapter对象在转换成OrderedGatewayFilter后也持有了getOrder方法,根据getOrder方法的返回值顺序组成ArrayList。处理请求时会调用DefaultGatewayFilterChain 用来处理filter,DefaultGatewayFilterChain 类持有了filter链;整个过滤链都是在这个过滤器中进行的,过滤器的执行顺序由order决定。
  8. 通过特定于请求的 Fliter 链运行请求,Filter可以在发送代理请求之前(pre)和之后(post)运行逻辑
  9. 执行所有pre过滤器逻辑,然后进行代理请求;发出代理请求后,将运行post过滤器逻辑。
  10. 处理完毕之后将 Response 返回到 Gateway 客户端


核心思想

当用户发出请求达到 GateWay 之后,会通过一些匹配条件,定位到真正的服务节点,并且在这个转发过程前后,进行一些细粒度的控制,其中 Predicate(断言) 是我们的匹配条件,Filter 是一个拦截器,有了这两点,再加上URL,就可以实现一个具体的路由,核心思想:路由转发+执行过滤器链

Route(路由) :构建网关的基础模块,由ID、目标URL、过滤器等组成

Predicate(断言) :开发人员可以匹配HTTP请求中的内容(请求头和请求参数),如果请求断言匹配则进行路由

Filter(过滤) :GateWayFilter的实例,使用过滤器,可以在请求被路由之前或者之后对请求进行修改

  • Filter在pre类型的过滤器可以做参数效验、权限效验、流量监控、日志输出、协议转换等。
  • Filter在post类型的过滤器可以做响应内容、响应头的修改、日志输出、流量监控等