zuul中请求的流程

Zuul架构图:

图一

zuulServlet中的service方法

 1  public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
 2         try {
 3             this.init((HttpServletRequest)servletRequest, (HttpServletResponse)servletResponse);
 4             RequestContext context = RequestContext.getCurrentContext();
 5             context.setZuulEngineRan();
 6 
 7             try {
 8                 this.preRoute();
 9             } catch (ZuulException var12) {
10                 this.error(var12);
11                 this.postRoute();
12                 return;
13             }
14 
15             try {
16                 this.route();
17             } catch (ZuulException var13) {
18                 this.error(var13);
19                 this.postRoute();
20                 return;
21             }
22 
23             try {
24                 this.postRoute();
25             } catch (ZuulException var11) {
26                 this.error(var11);
27             }
28         } catch (Throwable var14) {
29             this.error(new ZuulException(var14, 500, "UNHANDLED_EXCEPTION_" + var14.getClass().getName()));
30         } finally {
31             RequestContext.getCurrentContext().unset();
32         }
33     }
ZuulServlet_service

 

从上图可以看出,一个完整的请求流程过程时这样的:

1.请求——>zuulServlet处理;zuulServlet里面定义了整个请求的执行顺序;preRoute()——>route()——>postRoute();

2.zuulservlet中有一个zuulRunner对象,该对象中初始化了RequestContext,RequestContext继承了ConcurrentHashMap,并且它是一个单例的;所以它被用来存储整个请求中的与请求相关的数据,被所有的zuulFilter共享。

3.zuulRunner中含有FilterProcessor,FilterProcessor中定义了zuulfilter过滤器的执行规则(filterType,filterOrder,run)。

4.FilterProcessor从filterloader中获取zuulfilter;

5. zuulfilter是被filterFileManager所加载,并支持groovy热加载,采用了轮询的方式热加载。

6.加载的过滤器都存放在filterRegistry中。

7.得到这些过滤器后,就开始按preRoute()——>route()——>postRoute()的顺序开始执行这些过滤器。

8.执行这些过滤器有错误的时候会执行error过滤器。

9.执行完这些过滤器后,将请求结果返回给客户端。

 

路由转发时在route阶段执行的。

 

说明:

图一引用自https://blog.csdn.net/forezp/article/details/76211680  方志朋的博客

转载于:https://www.cnblogs.com/AWSL/p/10629866.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值