Bootstrap

springcloud的zuul路由配置详解

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/** 路径

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;