概述
引入的spring-cloud-starter-netflix-zuul依賴會自動的引入spring-boot-starter-actuator,所以無需重復引入application.yml配置啟用所有的監控端點
如下配置
#actuator 啟用所有的監控端點 “*”號代表啟用所有的監控端點,可以單獨啟用,例如,health,info,metrics # spring boot 升為 2.0 后,為了安全,默認 Actuator 只暴露2個端點,heath 和 info management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS
啟動服務
啟動注冊中心Eureka Server 項目 discovery-eureka
啟動服務提供者provider-user
啟動服務消費者consumer-movie-ribbon
啟動zuul網關gateway-zuul
訪問 eureka server http://localhost:8761/ 查看注冊情況
查看 Routes Endpoint
如官方解讀,使用GET方法訪問該端點,可以查看zuul當前映射的路由列表
使用POST方法訪問該端點就會強制刷新zuul當前映射的路由列表。
訪問zuul
http://localhost:4534/actuator/routes
zuul默認情況下會代理所有注冊在EurekaServer上的服務
查看 Filters Endpoint
訪問zuul
http://localhost:4534/actuator/filters
配置
忽略指定的微服務
在application.yml中通過 zuul.ignored-services屬性指定忽略的微服務 ,多個服務使用,
分隔
zuul:
ignored-services: provider-user,consumer-movie-ribbon
自定義微服務的訪問路徑
在application.yml中通過配置zuul.routes.微服務的ServiceId :指定路徑
zuul: routes: microservice-provider-user: /userprovider/**
這樣-provider-user就會被映射到/userprovider/**路徑
測試一下:
啟動注冊中心Eureka Server 項目discovery-eureka
啟動服務提供者provider-user
啟動服務消費者 consumer-movie-ribbon
啟動zuul網關gateway-zuul
訪問下設置的映射路徑: http://localhost:4534/userprovider/user/4
忽略所有微服務,只用路由指定微服務
如果只想讓zuul代理指定的微服務,可以將zuul.ignored-services設置為'*'
,然后再routes中設置指定的微服務
zuul: ignored-services: '*' routes: provider-user: /userprovider/**
訪問下映射后的路徑
那試試原來的地址還能訪問嗎?
http://localhost:4534/provider-user/user/4
zuul的路由情況 http://localhost:4534/actuator/routes
同時指定微服務的serviceId和對應路徑
效果同自定義微服務的訪問路徑 ,只不過這里用的是電影微服務
zuul: routes: movie-route: # 該配置方式中,這個名稱是路由名稱,可自定義 service-id: consumer-movie-ribbon path: /movie/** #與service-id對應的微服務的路徑
同時指定微服務的URL和對應路徑
zuul: routes: movie-route: # 該配置方式中,這個名稱是路由名稱,可自定義 url: http://localhost:7902/ # 指定的url 7902 為 該微服務的啟動端口 path: /movie/** #與service-id對應的微服務的路徑
上配置可以實現將/movie/** 映射到 http://localhost:7902/**
但是這種配置方式的路由不會作為HystrixCommand執行,同時不能使用Ribbon來負載均衡多個URL。 可以使用下面的的配置來使用Zuul的Hystrix 、Ribbon特性
同時指定微服務的URL和對應路徑,並且不破壞Zuul的Hystrix 、Ribbon特性
方式一:
zuul: routes: movie-route: # 該配置方式中,這個名稱是路由名稱,可自定義 service-id: micorservice-consumer-movie-ribbon path: /movie/** #與service-id對應的微服務的路徑 ribbon: eureka: enabled: false # 為Ribbon禁用Eureka micorservice-consumer-movie-ribbon: # 上面的service-id ribbon: listOfServers: http://localhost:7901,http://localhost:7902
使用正則表達式指定Zuul的路由匹配規則
@Bean public PatternServiceRouteMapper serviceRouteMapper() { return new PatternServiceRouteMapper( "(?<name>^.+)-(?<version>v.+$)", "${version}/${name}"); }
看下 PatternServiceRouteMapper
構造函數兩個參數 servicePattern 和 routePattern
servicePattern 微服務正則
routePattern 路由正則
上述的規則含義是 將 microservice-provider-user-v1這種微服務,映射到/v1/microservice-provider-user/**這個路徑
設置路由前綴
zuul: prefix: /api strip-prefix: false routes: microservice-provider-user: /userprovider/**
microservice-provider-user的控制層增加如下方法用作測試
訪問 : http://localhost:4534/api/userprovider/3
訪問zuul的 http://localhost:4534/api/userprovider/3 被轉發到 microservice-provider-user的 /api/{id} 方法 。
查看zuul的路由規則 http://localhost:4534/actuator/routes
示例二:
zuul: routes: microservice-provider-user: # 微服務的serviceId path: /user/** strip-prefix: false
訪問zuul的 /user/2 將被轉發到microservice-provider-user的/user/2
忽略某些路徑
如果需要更加細粒度的路由控制,比如想讓zuul代理某個服務,同時又想保護該微服務的某些敏感路徑,這個時候 ignored-patterns
屬性就派上用場了。
zuul: routes: microservice-provider-user: /userprovider/** ignored-patterns: /**/admin/** # 忽略包含admin的路徑
想看更多zuul的轉發細節,請將 com.netflix包的日志設置為debug級別。
application.yml中增加
logging:
level:
com.netflix: DEBUG # 將 com.netflix包的日志級別設置為debug