SpringCloud:路由ZUUL的配置详解
以下是两种配置文件的配置方式,可以根据需要选取对自己项目有利的配置。
自定义访问路径(path)
配置application.yml文件
#provider-user:是你的微服务模块的名称,及spring.application.name名称
zuul:
routes:
provider-user: /user/**
配置application.properties文件
zuul.routes.provider-user.path=/user/**
这样设置,provider-user微服务的访问路径就会被映射到/user/**路径,例如正常访问provider-user模块:localhost:8002/getUser 配置后需要访问zuul服务(假设我的zuul服务端口为8004,实际看自己的zuul服务端口):localhost:8004/user/getUser
忽略指定微服务
配置application.yml文件
#多个微服务名称用,分隔开
zuul:
ignored-services: provider-user,consumer-movie
配置application.properties文件
zuul.ignored-services=provider-user,consumer-movie
这样就可让Zuul忽略provider-user和consumer-movie微服务,只代理其他微服务
忽略所有服务,只要指定服务
配置application.yml文件
# 使用'*'可忽略所有微服务
zuul:
ignored-services: '*'
routes:
provider-user: /user/**
配置application.propertion文件
zuul.ignored-services=*
zuul.routes.provider-user=/user/**
让Zuul路由可以访问provider-user微服务。
同时指定serviceId和访问路径(path)
配置application.yml文件
# 该配置方式中,provider-user只是给路由一个名称,可以任意起名。
zuul:
routes:
provider-user:
service-id: provider-user
path: /user/** # service-id对应的路径
配置application.properties文件
zuul.routes.provider-user.serviceId=provider-user
zuul.routes.provider-user.path=/user/**
与自定义访问路径一样效用,微服务就会被映射到/user/**路径。
同时指定url和访问路径(path)
配置application.yml文件
# 该配置方式中,provider-user只是给路由一个名称,可以任意起名。
zuul:
routes:
provider-user:
url: http://localhost:8002/ # 指定的url
path: /user/** # service-id对应的路径
配置application.properties文件
zuul.routes.provider-user.url=http://localhost:8002
zuul.routes.provider-user.path=/user/**
将/user/**
映射到http://localhost:8000/**路径
使用这种方式配置的路由不会作为HystrixCommand执行,同时也不能使用Ribbon来负载均衡多个URL(下面的配置解决问题)
同时指定url和访问路径(path),不破坏Zuul的Hystrix、Ribbon特性
配置application.yml文件
#在E版之后新增了负载均衡的配置。
#配置中provider-user只是一个路由名称,可自定义名称
zuul:
routes:
provider-user:
path: /user/**
service-id: provider-user
ribbon:
eureka:
enabled: false #禁止Ribbon使用Eureka
provider-user:
ribbon:
listOfServers: localhost:8000,localhost:8001
配置application.properties文件
#配置中provider-user只是路由名称,可自定义
zuul.routes.provider-user.path=/user/**
zuul.routes.provider-user.serviceId=provider-user
ribbon.eureka.enabled=false
provider-user.ribbon.listOfServers=localhost:8002,localhost:8003
既指定path与URL,又不破坏Zuul的Hystrix与Ribbon特性,解决了上面的问题。
忽略一定范围的路径
配置application.yml文件
zuul:
ignoredPatterns: /**/admin/** # 忽略所有包含/admin/的路径
routes:
provider-user: /user/**
配置application.properties文件
zuul.ignored-patterns=/**/admin/**
zuul.routes.provider-user:/user/**
将microservice-provider-user微服务映射到/user/**路径,但会忽略该微服务中所有包含/admin/的路径.
路由前缀
配合prefix使用。
配置application.yml文件
zuul:
prefix: /api
strip-prefix: false
routes:
provider-user: /user/**
#prefix全局配置前缀 api
#strip-prefix:false 表示保留前缀访问(默认为true)
#示例如下
#strip-prefix:true : localhost:8004/api/user/getUser 自动转到路径 localhost:8002/user/getUser
#strip-prefix:false : localhost:8004/api/user/getUser 自动转到路径 localhost:8002/user/api/getUser
配置application.properties文件
zuul.prefix=/api
zuul.routes.provider-user.strip-prefix=false
zuul.routes.provider-user=/user/**
prefix全局配置前缀 api
strip-prefix:false 表示保留前缀访问(默认为true)
示例如下
strip-prefix:true : localhost:8004/api/user/getUser 自动转到路径 localhost:8002/user/getUser
strip-prefix:false : localhost:8004/api/user/getUser 自动转到路径 localhost:8002/user/api/getUser
小技巧
如无法掌握Zuul路由的规律,可将com.netflix包的日志级别设为DEBUG。这样,Zuul就会打印转发的具体细节,从而帮助我们更好地理解Zuul的路由配置
配置application.yml文件
logging:
level:
com.netflix: DEBUG
配置application.properties文件
logging.level.com.netflix=DEBUG