前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟我学Spring Cloud(Finchley版)-17-Zuul路由配置详解

跟我学Spring Cloud(Finchley版)-17-Zuul路由配置详解

作者头像
用户1516716
发布2019-07-10 15:09:38
7980
发布2019-07-10 15:09:38
举报
文章被收录于专栏:A周立SpringCloudA周立SpringCloud

默认的路由规则是:访问 $ZUUL_URL/指定为服务/** 会被转发到 指定微服务/**

但在实际项目中,往往需要自己定义路由规则,Zuul的路由配置非常灵活、简单,本节详细讲解Zuul的路由配置。

一、自定义指定微服务的访问路径

配置 zuul.routes.指定微服务的serviceId=指定路径 即可。例如:

代码语言:javascript
复制
zuul:
  routes:
    microservice-provider-user: /user/**

这样设置,microservice-provider-user微服务就会被映射到/user/**路径。

二、忽略指定微服务

忽略服务非常简单,可以使用 zuul.ignored-services 配置需要忽略的服务,多个用逗号分隔。例如:

代码语言:javascript
复制
zuul:
  ignored-services: microservice-provider-user,microservice-consumer-movie

这样就可让Zuul忽略microservice-provider-user和microservice-consumer-movie微服务,只代理其他微服务。

三、忽略所有微服务,只路由指定的微服务

很多场景下,我们可能只想要让Zuul代理指定的微服务,此时可以将 zuul.ignored-services 设为’*’

代码语言:javascript
复制
zuul:
  ignored-services: '*'   # 使用'*'可忽略所有微服务
  routes:
    microservice-provider-user: /user/**

这样就可以让Zuul只路由microservice-provider-user微服务。

四、同时指定微服务的serviceId和对应路径

例如:

代码语言:javascript
复制
zuul:
  routes:
    user-route:                   # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
      service-id: microservice-provider-user
      path: /user/**              # service-id对应的路径

本例配置的效果同示例(1)。

五、同时指定path和URL,例如:

代码语言:javascript
复制
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特性。

代码语言:javascript
复制
zuul:
  routes:
    user-route:
      path: /user/**
      service-id: microservice-provider-user
ribbon:
  eureka:
    enabled: false
microservice-provider-user:
  ribbon:
    listOfServers: localhost:8000,localhost:8001

这样就可以既指定path与URL,又不破坏Zuul的Hystrix与Ribbon特性了。

七、使用正则表达式指定Zuul的路由匹配规则

借助PatternServiceRouteMapper,实现从微服务到映射路由的正则配置。例如:

代码语言:javascript
复制
@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/**这个路径。

八、路由前缀

示例1:

代码语言:javascript
复制
zuul:
  prefix: /api
  strip-prefix: false
  routes:
    microservice-provider-user: /user/**

这样,访问Zuul的/api/microservice-provider-user/1路径,请求将会被转发到microservice-provider-user的/api/1

示例2:

代码语言:javascript
复制
zuul:
  routes:
    microservice-provider-user: 
      path: /user/**
      strip-prefix: false

这样访问Zuul的/user/1路径,请求将会被转发到microservice-provider-user的/user/1

TIPS:

① 可参考该Issue辅助理解: https://github.com/spring-cloud/spring-cloud-netflix/issues/1365

九、忽略某些路径

上文我们讲解了如何忽略微服务,但有时我们还需要更细粒度的路由控制。例如,我们想让Zuul代理某个微服务,同时又想保护该微服务的某些敏感路径。此时,可使用ignoredPatterns,指定忽略的正则。例如:

代码语言:javascript
复制
zuul:
  ignoredPatterns: /**/admin/**   # 忽略所有包含/admin/的路径
  routes:
    microservice-provider-user: /user/**

这样就可将microservice-provider-user微服务映射到/user/**路径,但会忽略该微服务中所有包含/admin/的路径。

小技巧

读者如无法掌握Zuul路由的规律,可将com.netflix包的日志级别设为DEBUG。这样,Zuul就会打印转发的具体细节,从而帮助我们更好地理解Zuul的路由配置,例如:

代码语言:javascript
复制
logging:
  level:
    com.netflix: DEBUG
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT牧场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、自定义指定微服务的访问路径
  • 二、忽略指定微服务
  • 三、忽略所有微服务,只路由指定的微服务
  • 四、同时指定微服务的serviceId和对应路径
  • 五、同时指定path和URL,例如:
  • 六、同时指定path和URL,并且不破坏Zuul的Hystrix、Ribbon特性。
  • 七、使用正则表达式指定Zuul的路由匹配规则
  • 八、路由前缀
  • 九、忽略某些路径
  • 小技巧
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档