在zuul中有两种路由配置:
1. 通过访问ip及端口号映射
2.通过服务名称映射
在上节代码基础上:
首先我把服务提供者与服务消费者都开了集群:
先配置第一种:
更改网关application.yml
server: port: 8090 eureka: client: service-url: default-zone: http://localhost:8761/eureka spring: application: name: zuul-service zuul: routes: feign: path: /feign/** url: http://localhost:8085/
通过path和url映射,访问path路径,直接访问到url对应的地址,这样显然不好,因为必须知道为服务的地址,并且集群的数量可能是动态扩展的,只实现了代理转发,不能实现负载均衡。其中/feign/*只代表一个路径,/feign/**代表下面多级路径
通过网关访问:
下面看第二种:
配置文件如下:
server: port: 8090 eureka: client: service-url: default-zone: http://localhost:8761/eureka spring: application: name: zuul-service zuul: routes: api-a: path: /feign/** service-id: eureka-feign #zuul: # routes: # feign: # path: /feign/** # url: http://localhost:8085/
既然注册到eureka上了,那就应该获取注册的服务信息,通过服务id访问微服务,用service-id把服务名称写在这里,并且还可以实现路由、熔段功能。
然后通过网关访问:
还有第三种:zuul.routes.服务名称: 访问路径
zuul: routes: eureka-feign: /feign/**
若忽略某个微服务不走网关,则这样设置:
zuul: #忽略某个微服务 ignored-services: eureka-feign
forward跳转到本地url:
zuul.routes.api-a.path=/user/** zuul.routes.api-a.url=forward:/user
路由前缀:
zuul.prefix
默认不生效,要想生效,zuul.stripPrefix=false
把忽略前缀设置成false
zuul.routes.api-a.path=/user/** zuul.routes.api-a.stripPrefix=false
若想根据顺序,进行路由规则配置,必须用yml文件,不能用properties文件
zuul: routes: users: path: /user/** others: path: /**