zuul的路由配置非常灵活,简单,有以下几种方式
最近在集成springcloud的项目,代码和文档会定期更新,项目的github地址
zuul的yml如果不配置路由,那么访问zuul网关的默认方式:http://zuulHostIp:port/要访问的微服务名称/服务中的url。其他路由规则如下:
1、自定义指定微服务的访问路径
自定义指定微服务的访问路径;配置zuul.routes.指定的微服务的serviceId = 指定的路径即可,如下:
# 配置路由规则 (方式1:自定义指定微服务的访问路径;配置zuul.routes.指定的微服务的serviceId = 指定的路径即可,如下)
zuul:
routes:
consumer-server: /consumer/** #消费者的服务名及路径
provider-server: /provider/** #提供者的服务名及路径
postman访问:
192.168.0.102:8040/consumer/consumer/getServiceName
解释说明:consumer 是zuul里面映射的前缀,/consumer/getServiceName 是我的代码里面的路径
2、忽略指定的微服务
忽略服务非常简单,可以使用zuul.ignored-services配置需要忽略的服务,多个服务用逗号隔开
zuul:
ignored-services: consumer-server,provider-server
3、忽略所有的微服务,只路由指定的微服务
很多场景下,可能只想要让zuul代理指定的微服务,此时可以将zuul.ignored-services 设为 ’ * ’
zuul:
ignored-services: '*'
routes:
consumer-server: /consumer/**
4、同时指定微服务的serviceId和对应的路径
zuul:
routes:
consumer-server-route: #该配置方式中,consumer-server-route只是给路由一个名字,可以任意取名
service-id: consumer-server
path: /consumer/**
5、同时指定path和url
zuul:
routes:
consumer-server-route: #该配置方式中,consumer-server-route只是给路由一个名字,可以任意取名
url: http://localhost:8085/ #指定consumer服务的地址
path: /consumer/**
需要注意的是,使用这种方式配置的路由不会作为HystrixCommand执行,同时也不能使用Ribbon来负载多个url。下面的配置可以解决这个问题(后续会说到这个问题)
6、同时指定path和url,并且不会破坏zuul的Hystrix,Ribbon的特性
zuul:
routes:
consumer-server-route: #该配置方式中,consumer-server-route只是给路由一个名字,可以任意取名
service-id: consumer-server #指定consumer服务的地址
path: /consumer/**
ribbon:
eureka:
enabled: false #为Ribbon禁用Eureka
consumer-server:
ribbon:
listOfServers: localhost:8000,localhost:8001
7、路由前缀
zuul:
prefix: api
strip-prefix: false
routes:
consumer-server: /consumer/** #消费者的服务名及路径
8、忽略某些路径
有时需要更细粒度的路由控制,例如,想让Zuul代理某个微服务,同时又想保护该微服务的某些敏感路径。此时,可使用ignored-Patterns,指定忽略的正则。例如:
zuul:
ignoredPatterns: /**/admin/** #忽略所有包含/admin/的路径
routes:
consumer-server: /consumer/** #消费者的服务名及路径
9、本地转发
zuul:
routes:
route-name:
path: /path-a/**
url: forward:/path-b
当访问zuul的/path-a/** 路径,将转发到zuul的/path-b/** 路径