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

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

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-20 11:32周立 Java教程

這篇文章主要給大家介紹了關于Spring Cloud Zuul過濾器的相關資料,通過閱讀本文您將了解:Zuul過濾器類型與請求生命周期、如何編寫Zuul過濾器、如何禁用Zuul過濾器和Spring Cloud為Zuul編寫的過濾器及其功能,需要的朋友可以參考下。

前言

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

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

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

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

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

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

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

除了默認的過濾器類型,Zuul還允許我們創建自定義的過濾器類型。例如,我們可以定制一種STATIC類型的過濾器,直接在Zuul中生成響應,而不將請求轉發到后端的微服務。

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

深入理解Spring Cloud Zuul過濾器

Zuul請求的生命周期

編寫Zuul過濾器

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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需實現以下幾個方法:

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

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

?
1
2
3
4
@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 ,可獲得類似如下的日志。

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

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

禁用Zuul過濾器

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

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

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

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

TPS

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

總結

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲咪咪| 人妖三级 | 国产精品热久久毛片 | 亚洲10p| 好姑娘在线观看完整版免费 | 极品主播的慰在线播放 | 女海盗斯蒂内塔的复仇2免费观看 | 黄版快手 | 精品精品久久宅男的天堂 | 色综合网天天综合色中文男男 | 免费国产之a视频 | 欧美乱子伦xxxx12在线 | 亚洲欧美日韩另类在线一 | 日韩二区三区 | 国产精品九九久久一区hh | 日韩大片在线播放 | 99国产精品免费观看视频 | 国产成人99精品免费观看 | 免费午夜影片在线观看影院 | 四虎导航 | 男人女人日皮视频 | 九九九九在线视频播放 | 亚洲精品成人在线 | 亚洲高清视频在线 | 四虎影视库永久在线地址 | 日本加勒比一区 | 好吊色视频988gao在线观看 | av中文字幕网免费观看 | 男人天堂999| 久久久久久久久女黄 | chinese老太granny chinese国产人妖hd | 九九热只有精品 | 国产成人无精品久久久 | 91麻豆精品国产自产在线观看 | 奇米影视7777| 国产精品久久毛片蜜月 | 精品国产品香蕉在线观看 | 国产三级精品久久三级国专区 | 亚洲va天堂va国产va久久 | 天堂69亚洲精品中文字幕 | 无颜之月5集全免费看无删除 |