自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring Cloud內(nèi)置的Zuul過(guò)濾器詳解

云計(jì)算
我是51CTO學(xué)院講師周立,在51CTO學(xué)院“4.20 IT充電節(jié)”(4月19~20日)到來(lái)之際,和大家分享一下《Spring Cloud內(nèi)置的Zuul過(guò)濾器應(yīng)用》的經(jīng)驗(yàn)。

[[188309]]

我是51CTO學(xué)院講師周立,在51CTO學(xué)院“4.20 IT充電節(jié)”(4月19~20日)到來(lái)之際,和大家分享一下《Spring Cloud內(nèi)置的Zuul過(guò)濾器應(yīng)用》的經(jīng)驗(yàn)。正文來(lái)啦~~~

Spring Cloud默認(rèn)為Zuul編寫(xiě)并啟用了一些過(guò)濾器,這些過(guò)濾器有什么作用呢?我們不妨按照@EnableZuulServer、@EnableZuulProxy兩個(gè)注解進(jìn)行展開(kāi),相信大家對(duì)這兩個(gè)注解都不陌生(至少都見(jiàn)過(guò)吧)。如果覺(jué)得陌生也沒(méi)有關(guān)系,可將@EnableZuulProxy簡(jiǎn)單理解為@EnableZuulServer的增強(qiáng)版。事實(shí)上,當(dāng)Zuul與Eureka、Ribbon等組件配合使用時(shí),@EnableZuulProxy是我們常用的注解。

在Spring Cloud的官方文檔中,只說(shuō)@EnableZuulServer是一個(gè)“空白”的Zuul,那么究竟空白在什么地方呢?與@EnableZuulProxy到底有什么區(qū)別呢?諸多問(wèn)題,都將在本文找到答案。

在此之前,我們先理解什么是RequestContext:

RequestContext:用于在過(guò)濾器之間傳遞消息。它的數(shù)據(jù)保存在每個(gè)請(qǐng)求的ThreadLocal中。它用于存儲(chǔ)請(qǐng)求路由到哪里、錯(cuò)誤、HttpServletRequest、HttpServletResponse都存儲(chǔ)在RequestContext中。RequestContext擴(kuò)展了ConcurrentHashMap,所以,任何數(shù)據(jù)都可以存儲(chǔ)在上下文中。

@EnableZuulServer過(guò)濾器

一、pre類(lèi)型過(guò)濾器

(1) ServletDetectionFilter:該過(guò)濾器用于檢查請(qǐng)求是否通過(guò)Spring Dispatcher。檢查后,通過(guò)isDispatcherServletRequest設(shè)置布爾值。

(2) FormBodyWrapperFilter:解析表單數(shù)據(jù),并為請(qǐng)求重新編碼。

(3) DebugFilter:顧名思義,調(diào)試用的過(guò)濾器,可以通過(guò)zuul.debug.request=true,或在請(qǐng)求時(shí),加上debug=true的參數(shù),例如$ZUUL_HOST:ZUUL_PORT/path?debug=true開(kāi)啟該過(guò)濾器。這樣,該過(guò)濾器就會(huì)把RequestContext.setDebugRouting()、RequestContext.setDebugRequest()設(shè)為true。

二、route類(lèi)型過(guò)濾器

SendForwardFilter:該過(guò)濾器使用Servlet RequestDispatcher轉(zhuǎn)發(fā)請(qǐng)求,轉(zhuǎn)發(fā)位置存儲(chǔ)在RequestContext.getCurrentContext().get("forward.to")中??梢詫⒙酚稍O(shè)置成:

  1. zuul: 
  2. routes: 
  3. abc:  
  4. path: /abc/** 
  5. url: forward:/abc 

 

然后訪(fǎng)問(wèn)$ZUUL_HOST:ZUUL_PORT/abc,觀察該過(guò)濾器的執(zhí)行過(guò)程。

三、post類(lèi)型過(guò)濾器

SendResponseFilter:將Zuul所代理的微服務(wù)的響應(yīng)寫(xiě)入當(dāng)前響應(yīng)。

四、error類(lèi)型過(guò)濾器

SendErrorFilter:如果RequestContext.getThrowable()不為null,那么默認(rèn)就會(huì)轉(zhuǎn)發(fā)到/error,也可以設(shè)置error.path屬性修改默認(rèn)的轉(zhuǎn)發(fā)路徑。

@EnableZuulProxy過(guò)濾器

如果使用注解@EnableZuulProxy,那么除上述過(guò)濾器之外,Spring Cloud還會(huì)安裝以下過(guò)濾器:

一、pre類(lèi)型過(guò)濾器

PreDecorationFilter:該過(guò)濾器根據(jù)提供的RouteLocator確定路由到的地址,以及怎樣去路由。該路由器也可為后端請(qǐng)求設(shè)置各種代理相關(guān)的header。

二、route類(lèi)型過(guò)濾器

(1) RibbonRoutingFilter:該過(guò)濾器使用Ribbon,Hystrix和可插拔的HTTP客戶(hù)端發(fā)送請(qǐng)求。serviceId在RequestContext.getCurrentContext().get("serviceId")中。該過(guò)濾器可使用不同的HTTP客戶(hù)端,例如

Apache HttpClient:默認(rèn)的HTTP客戶(hù)端

SquareupOkHttpClient v3:如需使用該客戶(hù)端,需保證com.squareup.okhttp3的依賴(lài)在classpath中,并設(shè)置ribbon.okhttp.enabled = true。

Netflix Ribbon HTTP client:設(shè)置ribbon.restclient.enabled = true即可啟用該HTTP客戶(hù)端。需要注意的是,該客戶(hù)端有一定限制,例如不支持PATCH方法,另外,它有內(nèi)置的重試機(jī)制。

(2) SimpleHostRoutingFilter:該過(guò)濾器通過(guò)Apache HttpClient向指定的URL發(fā)送請(qǐng)求。URL在RequestContext.getRouteHost()中。

51CTO學(xué)院 4.20 IT充電節(jié)

(19-20號(hào)兩天,100門(mén)視頻課程免單搶?zhuān)幸曨l課程會(huì)員享6折,非會(huì)員享7折,套餐折上8折,微職位立減2000元鉅惠)

活動(dòng)鏈接:http://edu.51cto.com/activity/lists/id-47.html?wenzhang

相關(guān)視頻教程:

Spring Cloud微服務(wù)實(shí)戰(zhàn)

http://edu.51cto.com/course/course_id-7348.html 

責(zé)任編輯:龐桂玉 來(lái)源: 51CTO.com
相關(guān)推薦

2021-01-14 08:13:39

Spring Clou應(yīng)用內(nèi)置過(guò)濾器

2017-05-04 22:30:17

Zuul過(guò)濾器微服務(wù)

2023-01-26 01:41:27

核心全局過(guò)濾器

2022-05-13 08:23:07

Zuul微服務(wù)Zuul過(guò)濾器

2022-02-21 23:58:49

Spring過(guò)濾器順序值

2023-04-14 09:01:25

2011-06-29 16:14:59

Qt 事件 過(guò)濾器

2009-07-08 16:07:04

Servlet過(guò)濾器配

2016-12-07 09:56:13

JavaFilter過(guò)濾器

2023-07-24 08:00:56

客戶(hù)端訪(fǎng)問(wèn)指定

2017-09-15 23:29:53

Spring Clou微服務(wù)架構(gòu)過(guò)濾器

2024-04-03 08:08:15

謂詞網(wǎng)關(guān)開(kāi)發(fā)

2021-07-05 15:22:03

Servlet過(guò)濾器客戶(hù)端

2024-01-05 09:04:35

隆過(guò)濾器數(shù)據(jù)結(jié)構(gòu)哈希函數(shù)

2009-06-18 10:13:00

Hibernate過(guò)濾

2009-07-08 17:33:37

Servlet過(guò)濾器

2024-11-04 08:45:48

布隆過(guò)濾器元數(shù)據(jù)指紋值

2022-02-16 23:58:41

Spring過(guò)濾器驗(yàn)證碼

2009-07-08 15:30:56

Servlet過(guò)濾器

2009-09-29 13:55:23

Hibernate設(shè)置
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)