- 自定义微服务的访问路径
配置zuul.routes.
指定微服务的serviceId = 指定路径
即可。例如:
zuul:
routes:
microservice-provider-user: /user/**
这样设置,microservice-provider-user
微服务就会被映射到 /user/**
路径。
- 忽略指定微服务
忽略服务可以使用zuul.ignored-services
配置需要忽略的服务,多个用逗号分隔。例如:
zuul:
ignored-services: microservice-provider-user, microservice-consumer-movie
这样就可让 Zuul 忽略 microservice-provider-user
和 microservice-consumer-movie
微服务,只代理其他微服务。
- 忽略所有微服务,只路由指定微服务
很多场景下可能只想要让 Zuul 代理指定的微服务,此时可以将zuul.ignored-services
设为*
。
zuul:
ignored-services: '*' # 使用 '*' 可忽略所有微服务
routes:
microservice-provider-user: /user/**
这样就可以让 Zuul 只路由 microservice-provider-user
微服务。
- 同时指定微服务的 serviceId 和对应路径。例如:
zuul:
routes:
user-route: # 该配置方式中,user-route 只是给路由一个名称,可以任意起名。
service-id: provider-microservice-user
path: /user/** # service-id 对应的路径
本例配置的效果和 示例1
一样。
- 同时指定 path 和 URL,例如:
zuul:
routes:
user-route: # 该配置方式中,user-route 只是给路由一个名称,可以任意起名。
url: http://localhost:8000/ # 指定的 url
path: /user/** # url 对应的路径
这样就可以将 /user/**
映射到 http://localhost:8000/**
。
需要注意的是,使用这种方式配置的路由不会作为 HystrixCommand 执行,同时也不能使用 Ribbon 来负载均衡多个 URL。示例6
可解决该问题。
- 同时指定 path 和 URL,并且不破坏 Zuul 的 Hystrix、Ribbon 特性。
zuul:
routes:
user-route:
path: /user/**
service-id: microservice-provider-user
ribbon:
eureka:
enabled: false # 为 Ribbon 禁用 Eureka
microservice-provider-user:
ribbon:
listOfServices: localhost:8000, localhost:8001
这样就可以既指定 path 与 URL,又不破坏 Zuul 的 Hystrix 与 Ribbon 特性了。
- 使用正则表达式指定 Zuul 的路由匹配规则
借助 PatternServiceRouteMapper,实现从微服务到映射路由的正则配置。例如:
@Bean
public PatternServiceRouteMapper serviceRouteMapper(){
// 调用构造函数PatternServiceRouteMapper(String servicePattern, String routePattern)
// servicePattern 指定微服务的正则
// routePattern 指定路由正则
return new PatternServiceRouteMapper("(?^.+)-(?v.+$)", "${version}/${name}")
}
通过这段代码即可实现将诸如 microservice-provider-user-v1
这个微服务,映射到 /v1/microservice-provider-user/**
这个路径。
- 路由前缀
示例1:
zuul:
prefix: /api
strip-prefix: false
routes:
microservice-provider-user: /user/**
这样,访问 Zuul 的 /api/microservice-provider-user/1
路径,请求将会被转发到 micro-service-provider-user
的 /api/1
。
示例2:
zuul:
routes:
microservice-provider-user:
path: /user/**
strip-prefix: false
这样访问 Zuul 的 /user/1
路径,请求将会被转发到 microservice-provider-user
的 /user/1
。
- 忽略某些路径
上文讲解了如何忽略该服务,但有时还需要更细粒度的路由控制。例如,想让 Zuul 代理某个微服务,同时又想保护该微服务的某些敏感路径。此时,可使用 ignoredPatterns,指定忽略的正则。例如:
zuul:
ignoredPatterns: /**/admin/** # 忽略所有包含 /admin/ 的路径
routes:
microservice-provider-user: /user/**
这样就可将 microservice-provider-user
微服务映射到 /user/**
路径,但会忽略该微服务中所有包含 /admin/
的路径。