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  方志朋的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM