在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: /**

 

我的github地址

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐