Spring Zuul将URL映射到`serviceId`,而不是`route``path`

时间:2018-04-14 04:45:03

标签: spring spring-boot netflix-zuul spring-cloud-netflix

我有一个Spring REST服务和一个Spring Zuul服务。他们注册了Spring-Eureka服务。

这是Zuul配置:

zuul:
  routes:
    rest:
      path:/rest/**
      serviceId:service-rest

我预计对/rest/*的任何调用都会路由到REST服务。但是,只有/service/rest/*将被转移到REST服务。

例如:

curl -i http://localhost:5555/rest/hello # response was 404

但是

curl http://localhost:5555/service-rest/hello # response was 200

似乎Spring Zuul将网址映射到serviceId,而不是path

如何配置Zuul以使用path但不使用serviceID

Zuul代码是:

@EnableZuulProxy
@SpringCloudApplication
public class ZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

Zuul config:

spring.application.name=api-gateway
server.port=5555

zuul:
  routes:
    rest:
      path:/rest/**
      serviceId:service-rest

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

REST服务是简单的Spring Web项目。其配置如下:

server.port=8001
spring.application.name=service-rest

eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/

1 个答案:

答案 0 :(得分:0)

默认情况下,Zuul会删除传递给它的URL的前缀,有关源代码,请参见here

因此,在您的情况下,/rest/部分从http://localhost:5555/rest/hello剥离而成为http://localhost:5555/hello,这将导致404 Not Found错误,因为Eureka不知道名为“你好”。

将Zuul配置更改为:

zuul:
  routes:
    rest:
      path:/rest/**
      serviceId:service-rest
      stripPrefix: false