SpringCloud升级之路2020.0.x版-41. SpringCloudGateway 基本流程讲解

炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述SpringCloud升级之路2020.0.x版-41. SpringCloudGateway 基本流程讲解相关的知识,希望能为你提供帮助。

SpringCloud升级之路2020.0.x版-41. SpringCloudGateway 基本流程讲解

文章图片

HttpWebHandlerAdapter - 将请求封装成 ServerWebExchange
??WebHandler??  的接口定义是:
public interface WebHandler {
Mono< Void> handle(ServerWebExchange exchange);
}

但是最外层传进来的参数是  ??request??  和  ??response??,需要将他们封装成  ??ServerWebExchange??,这个工作就是在 HttpWebHandlerAdapter 中做的。HttpWebHandlerAdapter 其实主要任务就是将各种参数封装成  ??ServerWebExchange??(除了和本次请求相关的  ??request??  和  ??response??,还有会话管理器 SessionManager,编码解码器配置,国际化配置还有 ApplicationContext 用于扩展)。
除了这些,处理  ??Forwarded??  还有  ??X-Forwarded*??  相关的 Header 的配置逻辑,也在这里进行。然后将封装好的  ??ServerWebExchange??  交给内层的  ??WebHandler??  即  ??ExceptionHandlingWebHandler??  继续处理。同时,从源码中可以看出,交给内层处理的 Mono 还加入了异常处理和记录响应信息的逻辑:
??HttpWebHandlerAdapter.java??
//交给内层处理封装好的 `ServerWebExchange`
return getDelegate().handle(exchange)
//记录响应日志,trace 级别,一般用不上
.doOnSuccess(aVoid -> logResponse(exchange))
//处理内层没有处理的异常,一般不会走到这里
.onErrorResume(ex -> handleUnresolvedError(exchange, ex))
//在所有处理完成后,将 response 设为 complete
.then(Mono.defer(response::setComplete));

剩下的内层的  ??WebHandler??,我们将在下一节中继续分析
微信搜索“我的编程喵”关注公众号,每日一刷,轻松提升技术,斩获各种offer:
【SpringCloud升级之路2020.0.x版-41. SpringCloudGateway 基本流程讲解】

    推荐阅读