Gateway处理请求流程简单分析

主要步骤如下:

  1. HttpServerHandle : netty 的服务端,接收客户端请求
  2. HttpWebHandlerAdapter :组装ServerWebExchange类型的exchange对象,触发跳转 DispatcherHandler;ServerWebExchange是一个HTTP请求-响应交互的契约。存放着重要的请求-响应属性、请求实例和响应实例,提供对HTTP请求和响应的访问,并公开额外的 服务器 端处理相关属性和特性,如请求属性等等,有点像 Context 的角色。
  3. DispatcherHandler : 请求调度器,负责转发到具体的请求处理器;
  4. RoutePredicateHandlerMapping : 匹配处理器后进行route的断言,成功则取执行过滤链,否则直接response;
  5. FilteringWebHandler:这个handler在Gateway启动时会将所有的 GlobalFilter 构建一个GatewayFilterAdapter(内部类),而GatewayFilterAdapter对象仅持有GlobalFilter接口方法,GatewayFilterAdapter对象在转换成OrderedGatewayFilter后也持有了getOrder方法,根据getOrder方法的返回值顺序组成ArrayList。处理请求时会调用DefaultGatewayFilterChain 用来处理filter,DefaultGatewayFilterChain 类持有了filter链;整个过滤链都是在这个过滤器中进行的,过滤器的执行顺序由order决定;

 

 

系统提供的重要的全局过滤器:

  • RemoveCachedBodyFilter

清除exchange的attributes中cachedRequestBody值。这个key的名称来自exchangeUtile中CACHED_REQUEST_BODY_ATTR = "cachedRequestBody"。

  • GatewayMetricsFilter

如果项目中添加 spring-boot-starter-actuator 依赖,且配置文件中配置 spring.cloud.gateway.metrics.enabled 的值为true时,才会创建该filter,用来整合监控相关,提供监控指标。

  • AdaptCachedBodyGlobalFilter

作用是从exchange的attributes中获取cachedRequestBody属性值作为request的body,注意使用此功能首先必须预设cachedRequestBody属性至attributes中。

  • NettyWriteResponseFilter

将代理响应写回网关的客户端侧。

  • RequestStatisticsFilter(我们自定义的Filter)

用来处理请求统计分析的埋点过滤器 。  

  • ForwardPathFilter

处理uri为forword开头的服务地址,形如:forword://xxxxxx.com,否则也忽略。

  • RouteToRequestUrlFilter

过滤器RouteToRequestUrlFilter是必须的全局过滤器,将从request里获取的原始url转换成Gateway进行请求转发时所使用的url。当请求进来时,RouteToRequestUrlFilter 会从 exchange 中获取 ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR 属性的值,该值是一个 Route 对象。若该对象不为空的话,RouteToRequestUrlFilter 会基于请求 URL 及 Route 对象里的 URL 来创建一个新的 URL。新 URL 会被放到 exchange 的 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 属性中。

  • LoadBalancerClientFilter(我们可以在此处做自定义负载均衡)

这个Filter是用来整合Ribbon的,其核心就是解析 scheme 为lb的 url,以此获取微服务的名称,然后再通过Ribbon获取实际的调用地址

  • WebsocketRoutingFilter 

过滤器实现了gateway对于Websocket 的支持,使用Spring Web Socket将转发 Websocket 请求

  • NettyRouting  

使用Netty的 HttpClient 转发http、https请求。

  • ForwardRoutingFilter

最终将exchange交还给Webhandler做http请求处理,已经准备返回数据给客户端(如果是forward则会发送到gateway本地的控制器处理)。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值