微服務SpringCloud—Zuul的路由端點
zuul的路由端點
當@EnableZuulProxy與Spring Boot Actuator配合使用時,Zuul會暴露一個路由管理
端點/routes。藉助這個端點,可以方便、直觀地檢視以及管理Zuul的路由。
/routes端點的使用非常簡單。使用GET方法訪問該端點,即可返回Zuul當前對映的
路由列表;使用POST方法訪問該端點就會強制重新整理Zuul當前對映的路由列表(儘管
路由會自動重新整理,SpringCloud依然提供了強制立即重新整理的方式)。
由於spring-cloud-starter-netflix-zuul已經包含了spring-boot-starter-actuator
寫的microservice-gateway-zuul已經具備路由管理的能力。
下面來做一下測試
1.啟動專案microservice-discovery-eureka。
2.啟動專案microservice-provider-user。
3.啟動專案microservice-consumer-movie。
4.啟動專案microservice-gateway-zuul。
5.使用瀏覽器訪問http:8040/actuator/routes,可獲得如下結果。
注意點:官網檢視暴露端啟2.0動所有暴露端點
#開啟所有暴露端點
management:
endpoints:
web:
exposure:
include: "*"
注意在使用Http訪問端點時,需要加上預設/actuator 字首
路由配置詳解
1.自定義指定微服務的訪問路徑
配置zuul.routes.指定微服務的serviceId = 指定路徑 即可。
zuul:
routes:
users: /user/**
這樣users微服務就會被對映到user/**路徑
2.忽略指定微服務
忽略服務很簡單,可以使用zuul。ignored-services配置需要忽略的服務,多個用逗號分隔。
zuul:
ignored-services: users,movie
3.忽略所有微服務,只路由指定微服務。
zuul:
ignored-services: '*' #使用'*'可忽略所有為服務
routes:
users: /users/**
4.同時制定微服務的serviceId和對應的路徑
zuul:
routes:
user-route: #該配置方式中,user-route只是給路有一個名稱,可以任意起名。
service-id: users
path: /users/** #service-id對應的路徑
5.同時指定path和URL,例如:
zuul:
routes:
user-route: #該配置方式中,user-route只是給路有一個名稱,可以任意起名。
url: http://localhost:8000/ #指定的url
path: /user/* #url對應的路徑
這樣就可以將/users/**對映到http://localhost:8000/#.
需要注意的是,使用這種方式的路又不會作為HystrixCommand執行,同時也不能使用Ribbon來負載均衡多個URL,例6可解決該問題。
6.同時指定path和URL,並且不破壞Zuul的Hystrix、Ribbon特性。
zuul:
routes:
user-route:
path: /users/**
service-id: users
ribbon:
eureka:
enable: false #為Ribbon禁用Eureka
users:
ribbon:
listOfServers: localhost:8000,localhost:8001
#這樣既可以指定path與URL,又不破壞Zuul的Hystrix與Ribbon特性了。
7.使用正則表示式指定Zuul的路由匹配規則
藉助RatternSericeRouteMapper,實現從微服務到對映路由的正則配置。例如:
8.路由字首
示例1:
zuul:
prefix: /api
strip-prefix: false
routes:
users: /users/**
這樣,訪問Zuul的/api/users/1路徑,
請求將會被轉發到microservice-provider-user的/api/1
示例2:
zuul:
routes:
users:
path:
strip-prefix: false
9.忽略某些路徑
想讓Zuul代理某個微服務,同時又想保護改為服務的某些敏感路徑。
此時,可使用ignored-Patterns,指定忽略的正則。例如:
zuul:
ignored-patterns: /**/admin/** #忽略所有包含/admin/的路徑
routes:
users: users/**
這樣就可以將users微服務對映到/user/**路徑,但會忽略微服務中所包含的/admin/的路徑。