Spring Cloud之Zuul(三):路由配置詳解
主題
路由配置詳解
前言
現實中可能只想讓Zuul代理部分微服務,又或者需要對URL進行更加精確的控制。Zuul的路由配置非常靈活、簡單,本部落格通過幾個例項,詳細講解Zuul的路由配置。
內容
1.自定義指定微服務的訪問路徑
說明:配置zuul.routes.指定微服務的serverId = 指定路徑即可。例如:
作用:cloud-register-user微服務會被對映到:/user/**路徑。
zuul:
routes:
cloud-register-user: /user/**
2.忽略指定微服務
說明:使用zuul.ignored-services配置需要忽略的服務,多個用逗號分隔。
作用:Zuul忽略cloud-register-user和cloud-register-consumer-ribbon微服務,只代理其它微服務。
zuul:
ignored-services: cloud-register-user,cloud-register-consumer-ribbon
3.忽略所有微服務,只路由指定微服務
說明:將zuul.ignored-services設為'*',routes配置指定的微服務。
作用:忽略所有微服務,只代理cloud-register-user微服務。
zuul: ignored-services: '*' routes: cloud-register-user: /user/**
4.同時指定微服務的serviceId和對應的路徑
作用:效果與例1一致。
zuul:
routes:
user-route: user # user-route只是給路由一個名稱,可以隨便命名
service-id: cloud-register-user
path: /user/** # service-id對應的路徑
5.同時指定path和URL
說明:這樣就可以將/user/**對映到http://localhost:8080/**,需要注意的是改該方式不會作為HystrixCommand執行,同時不支援Ribbon負載均衡。
作用:當訪問http://localhost:8023/user/1時,則會轉發至http://localhost:8080/1
zuul:
routes:
user-route: user # user-route只是給路由一個名稱,可以隨便命名
url: http://localhost:8080/ #指定URL
path: /user/** # URL對應的路徑
6.同時指定path和URL,並且不破壞Hystrix、Ribbon特性
說明:這樣就可以指定path和URL,並且不破壞Hystrix、Ribbon特性
zuul:
routes:
user-route:
path: /user/**
service-id: cloud-register-user
ribbon:
eureka:
enabled: false # 為Ribbon禁用Eureka
cloud-register-user: # 這邊是serviceId
ribbon:
listOfServers: http://localhost:8080,http://localhost:8081
7.使用正則表示式指定Zuul的路由匹配規則
說明:藉助PatternServiceRouteMapper,實現從微服務到對映路由的正則配置。
作用:下面將如cloud-register-user-v2這個微服務,對映到/v1/cloud-register-user/**這個路徑上
如:對微服務的serviceId命名為cloud-register-user-v1,那麼我們可以這麼來訪問http://localhost:8023/v1/cloud-register-user/1
8.路由字首
全域性時:
說明:設定 zuul.prefix 可以為所有的匹配增加字首, 例如 /api,代理字首預設會從請求路徑中移除(通過zuul.stripPrefix=false可以關閉這個功能),zuul.stripPrefix預設為true。
作用:當strip-prefix=true的時候 (http://localhost:8023/api/cloud-register-user
/1 -> http://localhost:8002/1)
當strip-prefix=false的時候(http://localhost:5016/api/cloud-register-user
/1 -> http://localhost:8002/api/1)
區域性時:
說明:下面面為true的配置,當訪問zuul的/user/1路徑,請求將會被轉發到cloud-register-user微服務的/1路徑
作用:當strip-prefix=true的時候 (http://localhost:8023/user/1-> http://localhost:8002/1)
當strip-prefix=false的時候(http://localhost:8023/user/1 -> http://localhost:8002/user/1)
如:配置全域性的,與prefix一起使用
zuul:
prefix: /api
strip-prefix: true
如:配置區域性的,與path一起使用
zuul:
routes:
provide-user:
path: /user/**
strip-prefix: false
9.忽略某些路徑
說明:2中有講有忽略微服務,但是有時需要更細粒度的路由控制。如,想讓Zuul代理某個微服務,同時又想保護該微服務的某些敏感路徑。此時,可使用ignored-patterns指定忽略的正則
作用:這樣就可以將cloud-register-user微服務對映到/user/**路徑,但會忽略該微服務中所有包含/admin的路徑。
zuul:
ignored-patterns: /**/admin/** # 忽略所有包含/admin/的路徑
routes:
cloud-register-user: /user/**
10.本地轉發
作用:但訪問Zuul的 /path-a/**路徑,將轉發到Zuul的path-b/**,其它遺留路徑將轉發到 path-c/**
zuul:
routes:
route-name:
path: /path-a/**
url: forward:/path-b
legacy:
path: /**
url: path-c
11.other
如果無法掌握Zuul路由規則,可配如下日誌
logging:
level:
com.netflix: DEBUG
原始碼獲取
1.gitee:https://gitee.com/StarskyBoy/cloud
2.github: https://github.com/StarskyBoy/cloud
獲取更多資訊,請掃我