中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入解析Spring Cloud內置的Zuul過濾器

發布時間:2020-09-16 04:28:20 來源:腳本之家 閱讀:155 作者:周立 欄目:編程語言

前言

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

@EnableZuulProxy是我們常用的注解。

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

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

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

@EnableZuulServer過濾器

一、pre類型過濾器

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

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

(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過濾器

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

一、pre類型過濾器

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

二、route類型過濾器

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

  1. Apache HttpClient:默認的HTTP客戶端
  2. Squareup OkHttpClient v3:如需使用該客戶端,需保證com.squareup.okhttp3的依賴在classpath中,并設置ribbon.okhttp.enabled = true
  3. Netflix Ribbon HTTP client:設置ribbon.restclient.enabled = true 即可啟用該HTTP客戶端。需要注意的是,該客戶端有一定限制,例如不支持PATCH方法,另外,它有內置的重試機制。

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙南县| 绥滨县| 松阳县| 宁远县| 怀仁县| 阜新市| 巴马| 秭归县| 永寿县| 尖扎县| 吉安市| 宁陵县| 霍州市| 额敏县| 通海县| 龙海市| 秦安县| 奇台县| 梨树县| 绥阳县| 清徐县| 德惠市| 杭州市| 赤壁市| 荆州市| 辉县市| 泰州市| 太湖县| 榆树市| 天气| 永仁县| 福海县| 上思县| 许昌市| 阳曲县| 芷江| 吐鲁番市| 垫江县| 多伦县| 离岛区| 安福县|