0. 前言
- SpringBoot版本:2.1.9.RELEASE
- SpringCloud版本:Greenwich.SR4
1. 核心简述
- 客户端向网关发起的请求,通过 ZuulServlet 利用过滤器 ZuulFilter 在不同阶段(前置、路由、后置)进行处理后返回结果
2. 请求处理流程
3. ZuulFilter 过滤器执行流程
前置、路由、后置方法按顺序执行,每个方法中的过滤器按顺序执行
- preRoute:
- ServletDetectionFilter:判断请求是否来自 DispatcherServlet
- Servlet30WrapperFilter:将请求包装成 Servlet30RequestWrapper ,方便后续处理请求(getRequest)
- FormBodyWrapperFilter:将带有表单的请求包装成 FormBodyWrapperFilter ,后续向远程服务发起请求时可以获取到表单数据
- DebugFilter:辅助调试
- PreDecorationFilter:设置请求上下文中的路由转发信息
- route:
- RibbonRoutingFilter:配合 Ribbon 和 Hysrtix ,根据 uri 向远程服务发起请求并接收响应结果
- SimpleHostRoutingFilter:显示指定 uri 向远程服务发起请求并接收响应结果
- SendForwardFilter:有需要的话发起转发请求
- postRoute:
- SendErrorFilter:处理请求错误响应
- SendResponseFilter:根据请求响应结果,处理后响应给客户端
学习参考:掘金小册《SpringCloudNetflix 源码解读与原理分析》