亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringCloud實戰小貼士之Zuul的路徑匹配

2024-07-13 10:12:35
字體:
來源:轉載
供稿:網友

不論是使用傳統路由的配置方式還是服務路由的配置方式,我們都需要為每個路由規則定義匹配表達式,也就是上面所說的 path 參數。在Zuul中,路由匹配的路徑表達式采用了Ant風格定義。

Ant風格的路徑表達式使用起來非常簡單,它一共有下面這三種通配符:

 

通配符 說明
? 匹配任意的單個字符
* 匹配任意數量的字符
** 匹配任意數量的字符,支持多級目錄

 

我們可以通過下表的示例來進一步理解這三個通配符的含義并參考著來使用:

 

URL路徑 說明
/user-service/? 它可以匹配 /user-service/ 之后拼接一個任務字符的路徑,比如: /user-service/a 、 /user-service/b 、 /user-service/c
/user-service/* 它可以匹配 /user-service/ 之后拼接任意字符的路徑,比如: /user-service/a 、 /user-service/aaa 、 /user-service/bbb 。但是它無法匹配 /user-service/a/b
/user-service/** 它可以匹配 /user-service/* 包含的內容之外,還可以匹配形如 /user-service/a/b 的多級目錄路徑

 

另外,當我們使用通配符的時候,經常會碰到這樣的問題:一個URL路徑可能會被多個不同路由的表達式匹配上。比如:有這樣的一個場景,我們在系統建設的一開始實現了 user-service 服務,并且配置了如下路由規則:

zuul.routes.user-service.path=/user-service/**zuul.routes.user-service.serviceId=user-service

但是隨著版本的迭代,我們對 user-service 服務做了一些功能拆分,將原屬于 user-service 服務的某些功能拆分到了另外一個全新的服務 user-service-ext 中去,而這些拆分的外部調用URL路徑希望能夠符合規則 /user-service/ext/** ,這個時候我們需要就在配置文件中增加一個路由規則,完整配置如下:

zuul.routes.user-service.path=/user-service/**zuul.routes.user-service.serviceId=user-servicezuul.routes.user-service-ext.path=/user-service/ext/**zuul.routes.user-service-ext.serviceId=user-service-ext

這個時候,調用 user-service-ext 服務的URL路徑實際上會同時被 /user-service/** 和 /user-service/ext/** 兩個表達式所匹配。在邏輯上,API網關服務需要優先選擇 /user-service/ext/** 路由,然后再匹配 /user-service/** 路由才能實現上述需求。但是如果使用上面的配置方式,實際上是無法保證這樣的路由優先順序的。

從下面的路由匹配算法中,我們可以看到它在使用路由規則匹配請求路徑的時候是通過線性遍歷的方式,在請求路徑獲取到第一個匹配的路由規則之后就會返回并結束匹配過程。所以當存在多個匹配的路由規則時,匹配結果完全取決于路由規則的保存順序。

@Overridepublic Route getMatchingRoute(final String path){ ... ZuulRoute route = null; if (!matchesIgnoredPatterns(adjustedPath)) { for (Entry<String, ZuulRoute> entry : this.routes.get().entrySet()) {  String pattern = entry.getKey();  log.debug("Matching pattern:" + pattern);  if (this.pathMatcher.match(pattern, adjustedPath)) {  route = entry.getValue();  break;  } } } log.debug("route matched=" + route); return getRoute(route, adjustedPath);}

下面所示代碼是基礎的路由規則加載算法,我們可以看到這些路由規則是通過 LinkedHashMap 保存的,也就是說路由規則的保存是有序的,而內容的加載是通過遍歷配置文件中路由規則依次加入的,所以導致問題的根本原因是對配置文件中內容的讀取。

protected Map<String, ZuulRoute> locateRoutes(){ LinkedHashMap<String, ZuulRoute> routesMap = new LinkedHashMap<String, ZuulRoute>(); for (ZuulRoute route : this.properties.getRoutes().values()) { routesMap.put(route.getPath(), route); } return routesMap;}

由于 properties 的配置內容無法保證有序,所以當出現這種情況的時候,為了保證路由的優先順序,我們需要使用YAML文件來配置,以實現有序的路由規則,比如使用下面的定義:

zuul:routes:user-service-ext:path: /user-service/ext/**serviceId: user-service-extuser-service:path: /user-service/**serviceId: user-service

忽略表達式

通過 path 參數定義的Ant表達式已經能夠完成API網關上的路由規則配置功能,但是為了更細粒度和更為靈活的配置路由規則,Zuul還提供了一個忽略表達式參數: zuul.ignored-patterns 。該參數可以用來設置不希望被API網關進行路由的URL表達式。

比如,以快速入門中的示例為基礎,如果我們不希望 /hello 接口被路由,那么我們可以這樣設置:

zuul.ignored-patterns=/**/hello/**zuul.routes.api-a.path=/api-a/**zuul.routes.api-a.serviceId=hello-service

然后,可以嘗試通過網關來訪問 hello-service 的 /hello 接口: http://localhost:5555/api-a/hello 。雖然該訪問路徑的完全符合 path 參數定義的 /api-a/** 規則,但是由于該路徑符合 zuul.ignored-patterns 參數定義的規則,所以不會被正確路由。同時,我們在控制臺或日志中還能看到沒有匹配路由的輸出信息:

o.s.c.n.z.f.pre.PreDecorationFilter   : No route found for uri: /api-a/hello

另外,該參數在使用時還需要注意它的范圍并不是對某個路由,而是對所有路由的。所以在設置的時候需要全面的考慮URL規則,防止忽略了不該被忽略的URL路徑。

如果您有任何想法或問題需要討論或交流,可進入交流區發表您的想法或問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲老头老太hd| 国产精品一区二区三区毛片淫片| 欧美一级视频在线观看| 亚洲国产另类 国产精品国产免费| 午夜精品一区二区三区视频免费看| 在线播放日韩精品| 国产日韩av在线| 日韩av网站在线| 欧美多人爱爱视频网站| 中文字幕国产亚洲| 久久福利网址导航| 亚洲一区二区在线播放| 亚洲aa在线观看| 久久久久这里只有精品| 亚洲欧美日韩直播| 精品美女久久久久久免费| 精品亚洲一区二区三区在线播放| 日韩av电影中文字幕| 中文字幕一精品亚洲无线一区| 亚洲美女中文字幕| 国产精品91久久| 色综合男人天堂| 精品国产户外野外| 国产精品劲爆视频| 亚洲最新视频在线| 欧美黑人xxxx| 亚洲欧美国产日韩中文字幕| 亚洲第一区在线观看| 欧美xxxx18国产| 性欧美长视频免费观看不卡| 亲爱的老师9免费观看全集电视剧| 国产欧美一区二区三区视频| 中文字幕亚洲一区二区三区五十路| 亚洲视频自拍偷拍| 亚洲视频自拍偷拍| 国产免费一区二区三区在线观看| 亚洲精品视频免费| 欧美日韩精品在线播放| 18一19gay欧美视频网站| 欧美日韩精品在线观看| 懂色av中文一区二区三区天美| 亚洲自拍偷拍色图| 国产精品美女视频网站| 亚洲成人中文字幕| 欧美床上激情在线观看| 国产精品88a∨| 国产精品亚洲第一区| 九九精品在线观看| 欧美日韩性视频在线| 亚洲精品久久久久久久久久久久| 麻豆乱码国产一区二区三区| 久久久人成影片一区二区三区观看| 亚洲精品第一页| 91精品国产综合久久香蕉922| 欧美亚洲成人xxx| 久久精品在线视频| 在线激情影院一区| 成人午夜高潮视频| 久久精品国产免费观看| 日韩av手机在线| 国产成人aa精品一区在线播放| 欧美一级大片视频| 国产精品一区二区女厕厕| 亚洲高清久久久久久| 亚洲欧美制服第一页| 国产午夜精品全部视频在线播放| 91高清视频免费| 国产精品吴梦梦| xxxx欧美18另类的高清| 日韩av综合网| 欧美亚洲国产日本| 欧美成人免费在线视频| 97视频在线观看免费| 国产精品一区二区三区免费视频| 韩国精品美女www爽爽爽视频| 91精品在线播放| 亚洲大胆人体视频| 国产成人精品日本亚洲| 中文精品99久久国产香蕉| 欧美有码在线观看视频| 欧美色另类天堂2015| 日韩成人免费视频| 欧美日韩性生活视频| 91精品国产自产91精品| 久久手机免费视频| 亚洲影院污污.| 欧美一级bbbbb性bbbb喷潮片| 亚洲第一区在线| 91久久精品国产| 久久精品国产亚洲7777| 精品无人区太爽高潮在线播放| 欧洲美女7788成人免费视频| 午夜免费久久久久| 久久韩国免费视频| 国产成人av在线播放| 欧美大片在线看免费观看| 久久99亚洲精品| 久久久久久噜噜噜久久久精品| 欧美日韩午夜剧场| 欧美电影在线观看完整版| 全球成人中文在线| 国产欧美在线看| 亚洲国产天堂久久综合| 黄色一区二区在线| 国产69精品99久久久久久宅男| 97精品在线视频| 亚洲欧美激情精品一区二区| 亚洲在线免费视频| 69视频在线播放| 国产精品久久久久久超碰| 久久免费高清视频| 亚洲色图国产精品| 国产精品美女久久久久久免费| 国产欧美日韩中文字幕在线| 亚洲女人被黑人巨大进入| 亚洲欧美日韩在线高清直播| 夜夜躁日日躁狠狠久久88av| 亚洲国产美女久久久久| 欧美最猛性xxxxx亚洲精品| 中文字幕久久亚洲| 亚洲免费av网址| 欧美日韩国产精品专区| 欧美午夜精品久久久久久浪潮| 亚洲男人的天堂网站| 国产美女久久精品| 国产亚洲欧美一区| 国产999精品| 欧美最猛性xxxxx亚洲精品| 国产不卡在线观看| 国产精品午夜视频| 亚洲精品一区二区久| 91成人国产在线观看| 欧美久久久精品| 日韩精品视频免费专区在线播放| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美日韩直播| 91精品国产91久久久| 欧美在线一区二区视频| 国产欧美va欧美va香蕉在| 亚洲天堂2020| 亚洲精品电影久久久| 亚洲第一色中文字幕| 日韩亚洲精品视频| 亚洲精品福利资源站| 亚洲国产精品电影| 国产精品视频99| 久久久久久久激情视频| 国产精品欧美久久久| 中文字幕九色91在线| 亚洲国产精品yw在线观看| 日韩专区在线播放| 精品亚洲一区二区三区| 国内精品久久久久久久久| 亚洲一区二区三区在线免费观看| 成人情趣片在线观看免费| 国产精品久久久久久网站| 亚洲第一福利网| 国产精品一区二区三区久久| 伊人伊人伊人久久| 亚洲欧美激情四射在线日| 欧美激情在线观看视频| 九九热r在线视频精品| 免费成人高清视频| 亚洲国产精品va在线看黑人动漫|