炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述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 基本流程讲解】
推荐阅读
- #yyds干货盘点#Redis之主从复制详述
- #yyds干货盘点#技术路线的选择重要但不具有决定性
- #yyds干货盘点# 5. Python 循环的本质就是一段代码懒得重复写
- #yyds干货盘点# web安全day13(简单深透测试流程)
- oeasy教您玩转vim - 70 - # 折叠细节
- SpringMVC接收参数 具体示例#yyds干货盘点#
- JAVA关于列表查询参数校验的问题
- Linux是什么系统(为什么要学习Linux?)
- ffmpeg图片缩放