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/的路径。