首先我们来回忆一下上篇文章我们配置路由规则的那两行代码:
zuul.routes.fc.path=/fc/**
zuul.routes.fc.service-id=feign-consumer
我们说当我的访问地址符合/fc/**规则的时候,会被自动定位到feign-consumer服务上去,不过两行代码有点麻烦,我们可以用下面一行代码来代替,如下:
zuul.routes.feign-consumer=/fc/**
zuul.routes后面跟着的是服务名,服务名后面跟着的是路径规则,这种配置方式显然更简单。
如果映射规则我们什么都不写,系统也给我们提供了一套默认的配置规则,默认的配置规则如下:
zuul.routes.feign-consumer.path=/feign-consumer/**
zuul.routes.feign-consumer.serviceId=feign-consumer
默认情况下,Eureka上所有注册的服务都会被Zuul创建映射关系来进行路由,但是也可忽略某个服务,不放过:
zuul.ignored-services=feign-consumer
有的时候我们还会遇到,比如我有两个服务,一个叫做feign-consumer,还有一个叫做feign-consumer-hello,此时我的路由配置规则可以这样来写:
zuul.routes.feign-consumer.path=/feign-consumer/**
zuul.routes.feign-consumer.serviceId=feign-consumer
zuul.routes.feign-consumer-hello.path=/feign-consumer/hello/**
zuul.routes.feign-consumer-hello.serviceId=feign-consumer-hello
此时我访问feign-consumer-hello的路径会同时被这两条规则所匹配,Zuul中的路径匹配方式是一种线性匹配方式,即按照路由匹配规则的存储顺序依次匹配,因此我们只需要确保feign-consumer-hello的匹配规则被先定义,feign-consumer的匹配规则被后定义,但是在properties文件中我们不能保证这个先后顺序,此时我们需要用yaml文件来配置,这个时候我们可以删掉resources文件夹下的application.properties,然后新建一个application.yml,内容如下:
spring:
application:
name: zuul
server:
port: 5000
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka
zuul:
routes:
provider: /p/hello/**
feign-consumer: /p/**
启动项目后访问结果如下:
第二个匹配到下面去了,说明是先和第一个匹配,匹配不上就在第二个上面匹配。