Spring Cloud Zuul使用筆記(一)
基本使用
主程序類增加@EnableZuulProxy註解
1
配置路由規則:
2
格式:zuul.routes.服務ID=/URL/**
?:後接1個字元。/URL/a、/URL/b
*:後接1級目錄。/URL/aaa、/URL/bbb
**:後接多級目錄。/URL/aaa/bbb
路由匹配規則載入順序
配置的路由規則存放在LinkedHashMap里,順序就是文件載入的順序,所以如果如下配置:
/URL/**=a-service
/URL/b/**=b-service
當訪問/URL/b/xxx的時候,本意是想訪問b-service,但因為這個URL匹配/URL/**,且/URL/**是先載入的,所以訪問的是a-service。
自動化配置路由規則&忽略
一般來說,我們配置路由規則都是如下格式:serviceId=/serviceId/**。
例如:user-service=/user-service/**。
如果服務太多,這麼一個個地寫在配置文件里也夠麻煩的。
當與Eureka結合之後,Zuul會自動為從Eureka獲取的服務都配一個格式如上的路由規則。
相關類:
SimpleRouteLocator#locateRoutes(),按照配置文件讀取的路由規則順序構建有序Map。
3
其子類DiscoveryClientRouteLocator#locateRoutes()在父類方法的基礎上根據serviceId構造默認URL:
4
其具體執行是SimpleRouteLocator#apply():
5
雖然這麼自動配置路由是方便了,但是Eureka上也許會有不想暴露在外的服務,可用如下配置忽略:
6
自定義路由映射
有時候我們會發布新版本的微服務,與老版本的微服務並存,對外提供服務。一般的命名方式:user-service、user-service-v1、user-service-v2,自然而然的,對外提供的url就是/user-service/、/user-service-v1/、/user-service-v2/。
不過如果我們仔細看業界比較常用的url,格式類似:
/v1/user-service/、/v2/user-service/。
在Zuul中,可以使用PatternServiceRouteMapper,通過正則表達式來自定義路由規則:
7
Ribbon&Hystrix
其實Zuul可以看做一個特殊的Feign,同樣支持Ribbon與Hystrix,配置可參看前文。
下一篇講講重要的過濾器。
※Spring Cloud客戶端負載均衡Ribbon筆記
※Spring Cloud斷路器Hystrix原理讀書筆記
TAG:Java個人學習心得 |