日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SpringCloud內(nèi)置的Zuul過濾器詳解

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

作者:周立 2017-04-12 14:43:01

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

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站設(shè)計、成都做網(wǎng)站、富寧網(wǎng)絡推廣、微信小程序開發(fā)、富寧網(wǎng)絡營銷、富寧企業(yè)策劃、富寧品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供富寧建站搭建服務,24小時服務熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

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

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

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

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

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

@EnableZuulServer過濾器

一、pre類型過濾器

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

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

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

二、route類型過濾器

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

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

然后訪問$ZUUL_HOST:ZUUL_PORT/abc,觀察該過濾器的執(zhí)行過程。

三、post類型過濾器

SendResponseFilter:將Zuul所代理的微服務的響應寫入當前響應。

四、error類型過濾器

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

@EnableZuulProxy過濾器

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

一、pre類型過濾器

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

二、route類型過濾器

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

Apache HttpClient:默認的HTTP客戶端

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

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

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


分享標題:SpringCloud內(nèi)置的Zuul過濾器詳解
URL標題:http://www.dlmjj.cn/article/cdjigii.html