国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SpringCloud實戰(zhàn)小貼士:Zuul的路徑匹配

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

[[206819]]

路徑匹配

不論是使用傳統(tǒng)路由的配置方式還是服務路由的配置方式,我們都需要為每個路由規(guī)則定義匹配表達式,也就是上面所說的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路徑可能會被多個不同路由的表達式匹配上。比如:有這樣的一個場景,我們在系統(tǒng)建設的一開始實現了user-service服務,并且配置了如下路由規(guī)則:

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

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

  1. zuul.routes.user-service.path=/user-service/** 
  2. zuul.routes.user-service.serviceId=user-service 
  3.  
  4. zuul.routes.user-service-ext.path=/user-service/ext/** 
  5. zuul.routes.user-service-ext.serviceId=user-service-ext 

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

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

  1. @Override 
  2. public Route getMatchingRoute(final String path) { 
  3.     ... 
  4.     ZuulRoute route = null
  5.     if (!matchesIgnoredPatterns(adjustedPath)) { 
  6.         for (Entry<String, ZuulRoute> entry : this.routes.get().entrySet()) { 
  7.             String pattern = entry.getKey(); 
  8.             log.debug("Matching pattern:" + pattern); 
  9.             if (this.pathMatcher.match(pattern, adjustedPath)) { 
  10.                 route = entry.getValue(); 
  11.                 break; 
  12.             } 
  13.         } 
  14.     } 
  15.     log.debug("route matched=" + route); 
  16.     return getRoute(route, adjustedPath); 

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

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

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

  1. zuul: 
  2.   routes: 
  3.     user-service-ext: 
  4.       path: /user-service/ext/** 
  5.       serviceId: user-service-ext 
  6.     user-service: 
  7.       path: /user-service/** 
  8.       serviceId: user-service 

忽略表達式

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

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

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

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

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

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

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉載請通過51CTO聯(lián)系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-04-13 11:06:28

SpringCloud隨機端口

2017-05-18 14:14:25

過濾器Spring ClouZuul

2017-05-19 15:13:05

過濾器Spring ClouZuul

2017-07-31 15:47:50

Zuul統(tǒng)一處理

2017-05-02 23:05:44

HTTPZuulCookie

2017-10-20 14:55:06

Spring ClouZuul加載

2022-05-13 08:23:07

Zuul微服務Zuul過濾器

2023-07-17 08:02:44

ZuulIO反應式

2017-08-10 16:14:07

FeignRPC模式

2020-11-18 11:26:45

SpringCloudZuulJava

2017-09-26 16:17:39

Ribboneager-load模式

2021-03-26 06:01:45

日志MongoDB存儲

2022-04-09 14:45:02

微服務常見概念Spring

2021-06-21 08:35:52

AntPathMatcSpringAnt風格

2013-07-02 11:01:01

2013-10-23 13:01:29

Ubuntu技巧時光機

2023-05-29 14:07:00

Zuul網關系統(tǒng)

2022-05-20 12:14:50

ZuulSpringClou

2010-12-14 09:15:50

Visual Stud

2016-12-01 13:50:38

點贊
收藏

51CTO技術棧公眾號

亚洲丝袜在线视频| 色妞欧美日韩在线| 狠狠干视频网站| 精品国产精品国产偷麻豆| 欧美日韩一区不卡| 久久久久久久久久久久91| 日韩精品一卡二卡三卡四卡无卡| 18久久久久久| 88xx成人网| 欧美日韩国产页| 久久久久久久片| 九九九久久久精品| 国产精品永久入口久久久| 国产香蕉精品| 中文字幕日韩有码| 爱情岛亚洲播放路线| 国产女人18毛片| 成人精品国产亚洲| 一区二区三区日韩精品| 成人做爰高清视频网站| 日韩电影在线观看一区| 51久久夜色精品国产麻豆| 欧美日韩精品一区二区三区 | 欧美日韩精品专区| 九色中文视频| 91免费小视频| av片在线免费| 另类的小说在线视频另类成人小视频在线| 91色琪琪电影亚洲精品久久| 欧美亚洲国产日韩| 九九热精品在线| 影视一区二区三区| 亚洲色图国产精品| 超碰在线中文字幕| 欧美成人午夜电影| 欧美xxxx免费虐| 精品欧美黑人一区二区三区| 免费在线看黄色| 7777精品伊人久久久大香线蕉完整版 | 中文字幕亚洲精品乱码| 国产精品黄色影片导航在线观看| 男人亚洲天堂| 日韩小视频在线| 国内精品伊人| 中文字幕自拍vr一区二区三区| 日韩av电影资源网| 久久亚洲精品国产亚洲老地址| 国产精品一区二区美女视频免费看 | 国产伦精品一区二区三区视频免费| 九一亚洲精品| 国产精品视频网| 忘忧草精品久久久久久久高清| 国产日本欧美视频| 欧美另类视频| 日本一区二区精品| 韩国一区二区三区| 少妇av一区二区三区无码| 91小视频在线免费看| www.99re.av| 粉嫩老牛aⅴ一区二区三区| 男女污污视频在线观看| 激情综合视频| wwwww在线观看免费视频| 午夜精品福利视频网站| 午夜裸体女人视频网站在线观看| 欧美精品免费看| aaaaaa亚洲| 自拍偷自拍亚洲精品播放| 一级毛片aaaaaa免费看| 欧美日韩中文在线观看| 久久久久久久久免费视频| 日韩成人中文字幕| 懂色av色香蕉一区二区蜜桃| 国产成人av在线播放| 国产欧美亚洲一区| 激情小视频网站| 一区二区三区鲁丝不卡| 日本高清中文字幕在线| 日韩av在线电影网| 99ri日韩精品视频| 不卡视频一区二区三区| 黑人精品欧美一区二区蜜桃| 国产九九热视频| 欧美视频你懂的| 95精品视频| 亚洲bt天天射| 国产成人免费视频网站高清观看视频| 加勒比一区二区三区| 8v天堂国产在线一区二区| 色综合天天色| 国产精品一区二区三区毛片淫片| 久久一二三四| wwwwww.色| 69久久夜色精品国产69蝌蚪网| 欧美aaaaaaaa| 99re在线视频上| 懂色av一区二区三区蜜臀| 性疯狂做受xxxx高清视频| 日韩欧美一区二区三区在线| 巨人精品**| 正在播放亚洲| 亚洲国产一区二区三区青草影视| 91九色国产在线播放| 97超级碰在线看视频免费在线看| 亚洲三级色网| www成人免费视频| 精品国产免费一区二区三区四区| 黄色欧美在线| 亚洲三区在线| 精品日本高清在线播放| 日本h片久久| 久久草.com| 亚洲曰韩产成在线| 欧美天堂一区二区| 欧美不卡在线一区二区三区| 亚洲人一二三区| 国产原创一区| 秋霞在线观看一区二区三区| 亚洲一区二区欧美激情| 日韩欧美中文在线观看| 成人手机在线播放| 欧美色区777第一页| 九九在线精品| 久久久久免费精品| 日韩成人在线视频网站| 尤物网精品视频| 91在线最新| 久久久久久中文字幕| 国产精品系列在线播放| 免费av在线电影| 精品中文字幕在线| 国产91精品久久久久久久网曝门| 91精品久久久久久粉嫩| 国产va免费精品高清在线| 久久综合给合久久狠狠狠97色69| av老司机免费在线| 国产日韩亚洲精品| 欧美视频13p| 国产欧美日韩影院| 久热精品在线播放| 久久精品99久久香蕉国产色戒| 理论片日本一区| 黄色成人影院| 91在线中字| 在线成人国产| av亚洲精华国产精华精华| 大荫蒂欧美视频另类xxxx| 一区二区三区在线免费| 国产女人aaa级久久久级| 午夜在线精品偷拍| 国产精品一区三区| 久久精品国产久精国产| 亚洲欧美日韩直播| 欧美高清在线一区二区| 激情综合电影网| 蜜臀久久精品| 高清全集视频免费在线| 婷婷av在线| 黄色精品视频| 日韩精品一区第一页| 国产自产视频一区二区三区| 老司机精品导航| 蜜桃视频在线观看一区| 亚洲精品免费播放| 成人动漫av在线| 午夜伊人狠狠久久| 亚洲美女在线观看| 欧美精品一区在线播放| 国产免费观看久久黄| y111111国产精品久久婷婷| 精品国产一二三四区| 欧美极品免费| 精品国产一区二区三区性色av| 青草影视电视剧免费播放在线观看| 老熟妇仑乱视频一区二区| 亚洲欧洲精品一区二区| 懂色av一区二区三区四区五区| 欧美重口另类videos人妖| 国产尤物av一区二区三区| 国产91丝袜在线播放| 日本精品600av| 国产调教视频在线观看| av在线中文| 久久久久久国产精品免费无遮挡| 日韩子在线观看| 男男电影完整版在线观看| 国内小视频在线看| 国精品一区二区三区| 久久精品国产99久久6| 麻豆精品视频在线观看| 国产精品灌醉下药二区| 日韩av最新在线| 91亚洲午夜在线| 7777精品视频| 色综合视频二区偷拍在线| 欧美性猛交p30| 国产精品久久久久久久久久久久久久久 | 国产精品丝袜xxxxxxx| аⅴ资源新版在线天堂| 正在播放国产精品|