我有一个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/
答案 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