預設情況下,Zuul會代理所有注冊到Eureka Server上的微服務
Zuul的路由規則如下:
http://ZUUL_HOST:ZUUL_PORT/serviceId/**
注:即微服務在Eureka Server上的serviceId/**會被轉發達到serviceId對應的微服務
一、自定義指定微服務的通路路徑
zuul:
routes: #配置路由映射
service-hi: /service/** #比如目前是給service-hi 添加映射位址為/service/**
二、忽略指定微服務
zuul:
ignored-services: service-hi #忽略serviceId為servie-hi的微服務
注:多個微服務使用逗号隔離
三、忽略所有微服務,隻路由指定微服務
zuul:
ignored-services: "*" #使用*忽略所有的微服務,隻路由指定的微服務
routes: #配置路由映射
service-hi: /service/** #比如目前是給service-hi 添加映射位址為/service/**
四、同時指定微服務的serviceId和path(對應路徑)
zuul:
routes:
service-test: #在本配置模式下service-test隻是給路由起一個名字,任意起名即可
service-id: service-hi
path: /service/** #service-id對應的路徑
五、同時指定path和URL
zuul:
routes:
service-test: #在本配置模式下service-test隻是給路由起一個名字,可以
任意起名即可
url: http://localhost:8080/ #指定的url
path: /service/** #url對應的路徑
這樣便可以将service/** 映射到http://localhost:8080/ **
注:使用這種方式配置的路由不會作為HystrixCommand執行,同時也不能使用Ribbon來負載均衡多個URL。
六、同時指定path和URL,并且不破壞Zuul的Hystrix、Ribbon特性
zuul:
routes:
service-test:
service-id: service-hi
path: /service/**
ribbon:
eureka:
enabled: false #為Ribbon禁用Eureka
service-hi:
ribbon:
listOfServers: localhoost:8763,localhost:8765
注:這裡首先禁用eureka的ribbon,然後單獨設定Ribbon
七、使用正規表達式指定Zuul的路由比對規則
@Bean
public PatternServiceRouteMapper serviceRouteMapper(){
//調用構造函數PatternServiceRouteMapper(String servicePattern, String routePattern)
//servicePattern指定微服務的正則
//routePattern指定路由正則
return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>h.+$)","${version}/${name}");
}
上面可以實作将service-hi這個微服務,映射到/hi/service/**這個路徑。
八、路由字首
zuul:
prefix: /hi
strip-prefix: false
routes:
service-hi: /service/**
這樣便可以将Zuul的/hi/service/**路徑,映射到微服務service-hi的hi/**
九、忽略某些路徑
如果我們實際需求中想讓Zuul代理某個微服務,同時又想保護戶該微服務的某些敏感路徑,可以使用ignored-patterns,指定忽略正則。
zuul:
ignored-patterns: /**/admin/** #忽略所有包含/admin/的路徑
routes:
service-hi: /service/**
這樣既可将微服務映射到service/**路徑,但會忽略微服務中包含/admin/的路徑