最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Spring Cloud Zuul過濾器

 更新時間:2017年02月28日 08:18:01   作者:周立  
這篇文章主要給大家介紹了關(guān)于Spring Cloud Zuul過濾器的相關(guān)資料,通過閱讀本文您將了解:Zuul過濾器類型與請求生命周期、如何編寫Zuul過濾器、如何禁用Zuul過濾器和Spring Cloud為Zuul編寫的過濾器及其功能,需要的朋友可以參考下。

前言

過濾器是Zuul的核心組件,這篇文章我們來詳細討論Zuul的過濾器。下面話不多說,來看看詳細的介紹吧。

過濾器類型與請求生命周期

Zuul大部分功能都是通過過濾器來實現(xiàn)的。Zuul中定義了四種標準過濾器類型,這些過濾器類型對應(yīng)于請求的典型生命周期。

(1) PRE:這種過濾器在請求被路由之前調(diào)用。我們可利用這種過濾器實現(xiàn)身份驗證、在集群中選擇請求的微服務(wù)、記錄調(diào)試信息等。

(2) ROUTING:這種過濾器將請求路由到微服務(wù)。這種過濾器用于構(gòu)建發(fā)送給微服務(wù)的請求,并使用Apache HttpClient或Netfilx Ribbon請求微服務(wù)。

(3) POST:這種過濾器在路由到微服務(wù)以后執(zhí)行。這種過濾器可用來為響應(yīng)添加標準的HTTP Header、收集統(tǒng)計信息和指標、將響應(yīng)從微服務(wù)發(fā)送給客戶端等。

(4) ERROR:在其他階段發(fā)生錯誤時執(zhí)行該過濾器。

除了默認的過濾器類型,Zuul還允許我們創(chuàng)建自定義的過濾器類型。例如,我們可以定制一種STATIC類型的過濾器,直接在Zuul中生成響應(yīng),而不將請求轉(zhuǎn)發(fā)到后端的微服務(wù)。

Zuul請求的生命周期如圖8-5所示,該圖詳細描述了各種類型的過濾器的執(zhí)行順序。

Zuul請求的生命周期

編寫Zuul過濾器

理解過濾器類型和請求生命周期后,我們來編寫一個Zuul過濾器。編寫Zuul的過濾器非常簡單,我們只需繼承抽象類ZuulFilter,然后實現(xiàn)幾個抽象方法就可以了。

那么現(xiàn)在,我們來編寫一個簡單的Zuul過濾器,讓該過濾器打印請求日志。

(1) 復制項目microservice-gateway-zuul,將ArtifactId修改為microservice-gateway-zuul-filter。

(2) 編寫自定義Zuul過濾器

public class PreRequestLogFilter extends ZuulFilter {
 private static final Logger LOGGER = LoggerFactory.getLogger(PreRequestLogFilter.class);
 @Override
 public String filterType() {
 return "pre";
 }
 @Override
 public int filterOrder() {
 return 1;
 }
 @Override
 public boolean shouldFilter() {
 return true;
 }
 @Override
 public Object run() {
 RequestContext ctx = RequestContext.getCurrentContext();
 HttpServletRequest request = ctx.getRequest();
 PreRequestLogFilter.LOGGER.info(String.format("send %s request to %s", request.getMethod(), request.getRequestURL().toString()));
 return null;
 }
}

由代碼可知,自定義的Zuul Filter需實現(xiàn)以下幾個方法:

  1. filterType:返回過濾器的類型。有pre、route、post、error等幾種取值,分別對應(yīng)上文的幾種過濾器。詳細可以參考com.netflix.zuul.ZuulFilter.filterType() 中的注釋。
  2. filterOrder:返回一個int值來指定過濾器的執(zhí)行順序,不同的過濾器允許返回相同的數(shù)字。
  3. shouldFilter:返回一個boolean值來判斷該過濾器是否要執(zhí)行,true表示執(zhí)行,false表示不執(zhí)行。
  4. run:過濾器的具體邏輯。本例中,我們讓它打印了請求的HTTP方法以及請求的地址。

(2) 修改啟動類,為啟動類添加以下內(nèi)容:

@Bean
public PreRequestLogFilter preRequestLogFilter() {
 return new PreRequestLogFilter();
}

測試

(1) 啟動microservice-discovery-eureka。

(2) 啟動microservice-provider-user。

(3) 啟動microservice-gateway-zuul-filter。

(4) 訪問http://localhost:8040/microservice-provider-user/1 ,可獲得類似如下的日志。

[nio-8040-exec-6] c.i.c.s.filters.pre.PreRequestLogFilter : send GET request to http://localhost:8040//microservice-provider-user/1

說明我們編寫的自定義Zuul過濾器被執(zhí)行了。

禁用Zuul過濾器

Spring Cloud默認為Zuul編寫并啟用了一些過濾器,例如DebugFilter、FormBodyWrapperFilter、PreDecorationFilter等。這些過濾器都存放在spring-cloud-netflix-core這個Jar包的org.springframework.cloud.netflix.zuul.filters包中。

一些場景下,我們想要禁用掉部分過濾器,此時該怎么辦呢?

答案非常簡單,只需設(shè)置zuul.<SimpleClassName>.<filterType>.disable=true ,即可禁用SimpleClassName所對應(yīng)的過濾器。以過濾器org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter為例,只需設(shè)置zuul.SendResponseFilter.post.disable=true ,即可禁用該過濾器。

同理,如果想要禁用《編寫Zuul過濾器》一節(jié)編寫的過濾器,只需設(shè)置zuul.PreRequestLogFilter.pre.disable=true 即可。

TPS

(1) 相關(guān)代碼com.netflix.zuul.ZuulFilter.disablePropertyName() 、com.netflix.zuul.ZuulFilter.isFilterDisabled()com.netflix.zuul.ZuulFilter.runFilter() 。

總結(jié)

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

相關(guān)文章

  • SpringBoot實現(xiàn)圖片上傳及本地訪問

    SpringBoot實現(xiàn)圖片上傳及本地訪問

    在SpringBoot項目中,處理靜態(tài)文件訪問尤其是實時更新的文件如商品圖片,可通過配置WebMvcConfig將本地文件映射到URL路徑上,以解決重啟項目才能訪問文件的問題,本文詳解如何保存和訪問這些文件,幫助開發(fā)者優(yōu)化項目文件管理
    2022-09-09
  • java-list創(chuàng)建的兩種常見方式

    java-list創(chuàng)建的兩種常見方式

    本文給大家分享Java-list創(chuàng)建的兩種常見方式,每種方式結(jié)合實例代碼給大家講解的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Java基礎(chǔ)類之ArrayUtils工具類詳解

    Java基礎(chǔ)類之ArrayUtils工具類詳解

    這篇文章主要介紹了java.ArrayDeque類使用方法,java.ArrayDeque類提供了可調(diào)整大小的陣列,并實現(xiàn)了Deque接口,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java真題實練掌握哈希表的使用

    Java真題實練掌握哈希表的使用

    哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過把關(guān)鍵碼映射的位置去尋找存放值的地方,說起來可能感覺有點復雜,我想我舉個例子你就會明白了,最典型的的例子就是字典
    2022-07-07
  • Java8流式API將實體類列表轉(zhuǎn)換為視圖對象列表的示例

    Java8流式API將實體類列表轉(zhuǎn)換為視圖對象列表的示例

    這篇文章主要介紹了Java8流式API將實體類列表轉(zhuǎn)換為視圖對象列表的示例,文中有相關(guān)的代碼示例供大家參考,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • java的三種隨機數(shù)生成方式

    java的三種隨機數(shù)生成方式

    主要介紹了java的三種隨機數(shù)生成方式的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2021-07-07
  • 流式圖表拒絕增刪改查之kafka核心消費邏輯下篇

    流式圖表拒絕增刪改查之kafka核心消費邏輯下篇

    這篇文章主要為大家介紹了流式圖表拒絕增刪改查之kafka核心消費邏輯講解的下篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 關(guān)于JavaEE內(nèi)部類的部分注意事項

    關(guān)于JavaEE內(nèi)部類的部分注意事項

    這篇文章主要介紹了關(guān)于JavaEE內(nèi)部類的部分注意事項,將一個類定義在另一個類里面或者一個方法里面,這樣的類稱為內(nèi)部類,這是一種封裝思想,那么使用內(nèi)部類的時候要注意些什么呢,讓我們一起來看看吧
    2023-03-03
  • Java多線程 中斷機制及實例詳解

    Java多線程 中斷機制及實例詳解

    這篇文章主要介紹了Java多線程 中斷機制及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 基于Spring Data的AuditorAware審計功能的示例代碼

    基于Spring Data的AuditorAware審計功能的示例代碼

    這篇文章主要介紹了基于Spring Data的AuditorAware審計功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論

枣阳市| 纳雍县| 大厂| 呼伦贝尔市| 沧州市| 天柱县| 额敏县| 疏附县| 色达县| 育儿| 五常市| 密云县| 磐安县| 宝坻区| 库车县| 崇阳县| 克东县| 甘泉县| 伊金霍洛旗| 崇州市| 紫阳县| 青冈县| 隆尧县| 河北区| 辽阳县| 古浪县| 平阴县| 太康县| 泰顺县| 林甸县| 二手房| 马关县| 皮山县| 嘉黎县| 顺义区| 乐至县| 关岭| 安新县| 太湖县| 卢湾区| 克什克腾旗|