SpringCloud解析之Zuul 一

2022-09-12 10:15:20 字數 2171 閱讀 1062

本文基於spring cloud edgware.sr6,zuul版本1.3.1,解析zuul的請求攔截機制,讓大家對zuul的原理有個大概的認識和了解。如有不對的地方,歡迎指正。

spring boot啟動完成後,通過瀏覽器發起閘道器請求,請求會到達dispatcherservlet.dodispatch(),此方法會查詢符合的handler和handleradapter來處理請求。我們來看下它是如何找到zuul的handler。

lookuphandler()方法返回。

我們看下registerhandlers()做了什麼。this.routelocator.getroutes()就是獲取註冊在eureka的服務列表,然後遍歷,

再來看下super.lookuphandler(urlpath, request)。

} // 如果獲取不到,則進行正則匹配,如果還匹配不到的話,則返回null

listmatchingpatterns = new arraylist();

for (string registeredpattern : this.handlermap.keyset())

else

if (usetrailingslashmatch())

} }string bestmatch = null;

// 匹配到之後,用請求urlpath對應的patterncomparator,對所有匹配的url進行排序,之後獲取第乙個匹配的url

comparatorpatterncomparator = getpathmatcher().getpatterncomparator(urlpath);

if (!matchingpatterns.isempty())

bestmatch = matchingpatterns.get(0);

} if (bestmatch != null)

if (handler == null)

} // 如果handler是string,則從應用上下文中獲取對應的bean

if (handler instanceof string)

validatehandler(handler, request);

// 解析對映url的後半段請求uri
// 最後再確認一次bestmatch是否是最匹配請求的路由

mapuritemplatevariables = new linkedhashmap();

for (string matchingpattern : matchingpatterns)

} if (logger.isdebugenabled())

// 構建handlerexecutionchain並返回
}

// no handler found...

return

null;

}至此,終於找到了zuul的handler,其中有些細節沒有提或是略過,有興趣的朋友可以自行下去翻閱。

總結一下:

總結之SpringCloud之路由閘道器 Zuul

所有從裝置或 來的請求都會經過zuul到達後端的netflix應用程式。作為乙個邊界性質的應用程式,zuul提供了動態路由 監控 彈性負載和安全功能。zuul底層利用各種filter實現如下功能 認證和安全 識別每個需要認證的資源,拒絕不符合要求的請求。效能監測 在服務邊界追蹤並統計資料,提供精確的...

SpringCloud之Dashboard 流監控

新建springcloud consumer hystrix dashboard模組 新增依賴 org.springframework.cloudgroupid spring cloud starter hystrixartifactid 1.4.6.releaseversion dependenc...

SpringCloud之Hystrix應用實踐

使用springcloud的hystrix功能,有幾種方式 1 單應用監聽,也可以用於測試 引用包 org.springframework.boot spring boot starter actuator org.springframework.cloud spring cloud starter...