Spring Cloud內建的Zuul過濾器詳解

2021-09-07 17:13:55 字數 1870 閱讀 2568

spring cloud預設為zuul編寫並啟用了一些過濾器,這些過濾器有什麼作用呢?我們不妨按照@enablezuulserver、@enablezuulproxy兩個註解進行展開,相信大家對這兩個註解都不陌生(至少都見過吧)。如果覺得陌生也沒有關係,可將@enablezuulproxy簡單理解為@enablezuulserver的增強版。事實上,當zuul與eureka、ribbon等元件配合使用時,@enablezuulproxy是我們常用的註解。

在spring cloud的官方文件中,只說@enablezuulserver是乙個「空白」的zuul,那麼究竟空白在什麼地方呢?與@enablezuulproxy到底有什麼區別呢?諸多問題,都將在本文找到答案。

在此之前,我們先理解什麼是requestcontext:

requestcontext:用於在過濾器之間傳遞訊息。它的資料儲存在每個請求的threadlocal中。它用於儲存請求路由到**、錯誤、httpservletrequest、httpservletresponse都儲存在requestcontext中。requestcontext擴充套件了concurrenthashmap,所以,任何資料都可以儲存在上下文中。

一、pre型別過濾器

(1) servletdetectionfilter:該過濾器用於檢查請求是否通過spring dispatcher。檢查後,通過isdispatcherservletrequest設定布林值。

(3) debugfilter:顧名思義,除錯用的過濾器,可以通過zuul.debug.request=true,或在請求時,加上debug=true的引數,例如$zuul_host:zuul_port/path?debug=true開啟該過濾器。這樣,該過濾器就會把requestcontext.setdebugrouting()requestcontext.setdebugrequest()設為true。

二、route型別過濾器

sendforwardfilter:該過濾器使用servlet requestdispatcher**請求,**位置儲存在requestcontext.getcurrentcontext().get("forward.to")中。可以將路由設定成:

zuul:

routes:

abc:

path: /abc/**

url: forward:/abc

然後訪問$zuul_host:zuul_port/abc,觀察該過濾器的執行過程。

三、post型別過濾器

sendresponsefilter:將zuul所**的微服務的的響應寫入當前響應。

四、error型別過濾器

senderrorfilter:如果requestcontext.getthrowable()不為null,那麼預設就會**到/error,也可以設定error.path屬性修改預設的**路徑。

如果使用註解@enablezuulproxy,那麼除上述過濾器之外,spring cloud還會安裝以下過濾器:

一、pre型別過濾器

二、route型別過濾器

(1) ribbonroutingfilter:該過濾器使用ribbon,hystrix和可插拔的http客戶端傳送請求。serviceid在requestcontext.getcurrentcontext().get("serviceid")中。該過濾器可使用不同的http客戶端,例如

(2) ******hostroutingfilter:該過濾器通過apache httpclient向指定的url傳送請求。url在requestcontext.getroutehost()中。

總結之SpringCloud之路由閘道器 Zuul

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

ruby中的 z與 Z區別

1 s this is nthe name n 2 puts 3 puts s.match name z 4 puts s.match name z 5 puts 6 7 s this is nthe name 8 puts 9 puts s.match name z 10 puts s.match...

小z的襪子

作為乙個生活散漫的人,小z每天早上都要耗費很久從一堆五顏六色的襪子中找出一雙來穿。終於有一天,小z再也無法忍受這惱人的找襪子過程,於是他決定聽天由命 具體來說,小z把這n只襪子從1到n編號,然後從編號l到r l 儘管小z並不在意兩隻襪子是不是完整的一雙,甚至不在意兩隻襪子是否一左一右,他卻很在意襪子...