一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 深入解析Spring Cloud內置的Zuul過濾器

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

2020-08-19 11:30周立 Java教程

這篇文章主要給大家深入的介紹了Spring Cloud內置的Zuul過濾器的相關資料,文中給大家介紹的很詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。

前言

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") 中。可以將路由設置成:

?
1
2
3
4
5
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() 中。

總結

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

原文鏈接:http://www.itmuch.com/spring-cloud/zuul/zuul-filter-in-spring-cloud/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 2018高清国产一道国产 | 2021精品国夜夜天天拍拍 | 91免费播放 | 国产在线xvideos | 草莓视频旧版本 | 狠狠色伊人亚洲综合网站色 | 无套啪啪 | 大学第一次基本都没了 | 国产在线视频在线观看 | 国产一级片视频 | 色综合色狠狠天天久久婷婷基地 | 明星ai人脸替换造梦在线播放 | 国产精品亚洲一区二区久久 | 免费波多野结衣庭教师 | 80s在线| 国产日韩精品一区二区在线观看 | 国产精品视频免费看 | 俄罗斯freeⅹ性欧美 | 爽爽窝窝午夜精品一区二区 | 亚洲第9页| 欧美精选欧美极品 | 亚洲午夜精品久久久久久人妖 | 国色天香论坛社区在线视频 | 四虎影院精品在线观看 | asian4you裸模 | 日韩爱爱 | 国产永久一区二区三区 | 精品四虎国产在免费观看 | 清纯唯美 亚洲 | 性做久久久久久 | 午夜性色一区二区三区不卡视频 | 日韩欧美推理片免费看完整版 | 精品国产免费久久久久久 | 欧美人成绝费网站色www吃脚 | 小寡妇水真多好紧 | 男人的天堂在线观看入口 | 高人先生免费观看全集 | 国产精品成人网红女主播 | yellow视频在线观看免费 | 欧美精品久久久久久久影视 | 被老头肉至怀孕小说 |