自定义指定微服务的访问路径
配置zuul.routes.指定微服务的serviceId = 指定路径
上图为serviceId
zuul:
routes:
providerservice: /user/** #providerservice微服务会被映射到/user/**路径
consumer: /user/** #consumer微服务会被映射到/user/**路径
忽略指定微服务
zuul:
ignored-services:
- consumer
- providerservice
忽略所有微服务,只路由指定的微服务
zuul:
ignored-services: '*'
routes:
providerservice: /user/** #providerservice微服务会被映射到/user/**路径
指定微服务的serviceId和对应路径
zuul:
routes:
myservice: #只是给路由一个名称,可以任意起名
service-id: providerservice # service-id
path: /user/** # service-id对应的路径
指定path和URL
zuul:
routes:
myservice:
url: http://localhost:8081/
path: /user/**
需要注意的是,使用这种方式配置的路由不会作为HystrixCommand执行,同时也不能使用Ribbon来负载均衡多个URL
指定path和URL,并且不破坏Zuul的Hystrix、Ribbon特性。
zuul:
routes:
user-route:
path: /user/**
service-id: providerservice
ribbon:
eureka:
enabled: false
providerservice:
ribbon:
listOfServers: localhost:8000,localhost:8001
使用正则表达式指定Zuul的路由匹配规则
@Bean
public PatternServiceRouteMapper serviceRouteMapper() {
// 调用构造函数PatternServiceRouteMapper(String servicePattern, String routePattern)
// servicePattern指定微服务的正则
// routePattern指定路由正则
return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)", "${version}/${name}");
}
通过这段代码即可实现将诸如microservice-provider-user-v1这个微服务,映射到/v1/microservice-provider-user/**这个路径。
路由前缀
zuul:
prefix: /api
strip-prefix: false
routes:
microservice-provider-user: /user/**
访问Zuul的/api/microservice-provider-user/1路径,请求将会被转发到microservice-provider-user的/api/1
zuul:
routes:
microservice-provider-user:
path: /user/**
strip-prefix: false
访问Zuul的/user/1路径,请求将会被转发到microservice-provider-user的/user/1
忽略某些路径
zuul:
ignoredPatterns: /**/admin/** # 忽略所有包含/admin/的路径
routes:
microservice-provider-user: /user/**
小技巧
读者如无法掌握Zuul路由的规律,可将com.netflix包的日志级别设为DEBUG。这样,Zuul就会打印转发的具体细节
logging:
level:
com.netflix: DEBUG
Zuul的高可用
如果调用的客户端注册到了Eureka Server上,Zuul的高可用非常简单,只需将多个Zuul节点注册到Eureka Server上,就可实现Zuul的高可用。此时,Zuul的高可用与其他微服务的高可用没什么区别。
如果调用的客户端无法注册到Eureka Server上,可以使用负载均衡器来实现Zuul的高可用,例如Nginx、HAProxy、F5等方案保证高可用。
Zuul客户端将请求发送到负载均衡器,负载均衡器将请求转发到其代理的其中一个Zuul节点。这样,就可以实现Zuul的高可用