日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Zuul 2 –样本过滤器

發(fā)布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Zuul 2 –样本过滤器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Zuul 2終于開源了 。 我第一次聽到Zuul 2年Spring由米奇·科恩一個2016的講就是可以在這里找到 ,這是好事,終于可以用它玩。

為了快速實現(xiàn)Zuul 2之類的網關的目的–網關提供了微服務生態(tài)系統(tǒng)的切入點。 由于所有客戶的請求都是通過網關路由的,因此它可以控制路由,請求和響應流經網關的各個方面–

  • 基于不同標準的路由-uri模式,標頭等
  • 監(jiān)控服務運行狀況
  • 對原始服務器的負載平衡和限制請求
  • 安全
  • 金絲雀測試

我在這篇文章中的目標很簡單–編寫一個Zuul2過濾器,該過濾器可以刪除路徑前綴并將請求發(fā)送到下游服務并返回。

Zuul2過濾器是定制Zuul的機制。 假設客戶發(fā)送請求到/ passthrough / someapi調用,那么我希望Zuul 2層使用/ someapi uri將請求轉發(fā)到下游服務。 Zuul2過濾器通常打包為常規(guī)文件,并動態(tài)加載(并可能刷新)并應用。 不過,我的示例會有所不同,我的過濾器是用Java編碼的,因此我不得不繞過Zuul內置的加載機制。

簡單地遵循代碼即可,該代碼可在我的github存儲庫中找到 – https://github.com/bijukunjummen/boot2-load-demo/tree/master/applications/zuul2-sample,與以下代碼打包在一起提供相似功能的一組樣本。 該代碼基于此處提供的Zuul 2示例。

這是我的過濾器的外觀:

import com.netflix.zuul.context.SessionContext; import com.netflix.zuul.filters.http.HttpInboundSyncFilter; import com.netflix.zuul.message.http.HttpRequestMessage;import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class StripPrefixFilter extends HttpInboundSyncFilter {private final List<String> prefixPatterns;public StripPrefixFilter(List<String> prefixPatterns) {this.prefixPatterns = prefixPatterns;}@Overridepublic HttpRequestMessage apply(HttpRequestMessage input) {SessionContext context = input.getContext();String path = input.getPath();String[] parts = path.split("/");if (parts.length > 0) {String targetPath = Arrays.stream(parts).skip(1).collect(Collectors.joining("/"));context.set("overrideURI", targetPath);}return input;}@Overridepublic int filterOrder() {return 501;}@Overridepublic boolean shouldFilter(HttpRequestMessage msg) {for (String target: prefixPatterns) {if (msg.getPath().matches(target)) {return true;}}return false;} }

它擴展了“ HttpInboundSyncFilter”,這些過濾器處理入站到原始服務器的請求。 可以想象,有一個“ HttpOutboundSyncFilter”可以攔截來自原始服務器的出站呼叫。 這些“同步”過濾器有一個“ HttpInboundFilter”和“ HttpOutboundFilter”對應物,它們返回RxJava Observable類型。

我的過濾器實現(xiàn)中有一個魔術字符串“ overrideUri”。 如果您對我如何發(fā)現(xiàn)它是替代uri感到好奇,那就是通過掃描Zuul2代碼庫。 Netflix內部可能使用了很多過濾器,但尚未發(fā)布以供一般使用。

有了此過濾器后,我通過使用此組件顯式注冊我的自定義過濾器來繞過Zuul2的動態(tài)groovy腳本加載功能:

import com.netflix.zuul.filters.FilterRegistry; import com.netflix.zuul.filters.ZuulFilter;import javax.annotation.PostConstruct; import javax.inject.Inject; import java.util.ArrayList; import java.util.List; import java.util.Set;public class FiltersRegisteringService {private final List<ZuulFilter> filters;private final FilterRegistry filterRegistry;@Injectpublic FiltersRegisteringService(FilterRegistry filterRegistry, Set<ZuulFilter> filters) {this.filters = new ArrayList<>(filters);this.filterRegistry = filterRegistry;}public List<ZuulFilter> getFilters() {return filters;}@PostConstructpublic void initialize() {for (ZuulFilter filter: filters) {this.filterRegistry.put(filter.filterName(), filter);}} }

我不得不做一些較小的調整,以引導我的自定義過濾器來完成整個設置,這些可以在github repo中進行 。

一旦啟動了帶有該自定義過濾器的Zuul2示例,其行為就是在刪除了前綴“ / passthrough”之后,對/ passthrough / messages的任何請求都會路由到下游系統(tǒng)。 啟動Zuul 2應用程序的說明是repo的README的一部分。

這是編寫自定義Zuul2過濾器的快速入門,我希望這給了足夠的感覺來評估Zuul 2。

翻譯自: https://www.javacodegeeks.com/2018/06/zuul-2-sample-filter.html

總結

以上是生活随笔為你收集整理的Zuul 2 –样本过滤器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。