Spring 云网关 returns 空响应
Spring cloud gateway returns empty response
我正在尝试使用 Spring 云网关来路由我的微服务,但即使微服务按预期工作,网关路由 returns 也是一个空响应。
我的微服务是一个简单的应用程序,它在端口 5861
上 运行。在使用特定路径进行路由试验后,我通过预测所有情况以确保它已路由,将我的网关路由到它。
这是我的网关配置文件:
spring:
cloud:
gateway:
routes:
- id: product_service
uri: localhost:5861/
predicates:
- Path=/product-service/**
在 运行 服务并命中它们之后,我的微服务 returns 正确响应:
$ curl -v http://localhost:5861/product/
* Trying 127.0.0.1:5861...
* Connected to localhost (127.0.0.1) port 5861 (#0)
> GET /product/ HTTP/1.1
> Host: localhost:5861
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Wed, 01 Jun 2022 19:41:40 GMT
<
* Connection #0 to host localhost left intact
[{"id":1,"name":"Apple","price":2},{"id":2,"name":"Apple","price":2},{"id":3,"name":"Apple","price":2}]
但是,如果我尝试从我的 API 网关执行此操作,它 returns 什么都没有,如果我尝试从我的浏览器访问它,则会出现一个空白页面。
$ curl -v http://localhost:5860/product-service/product
* Trying 127.0.0.1:5860...
* Connected to localhost (127.0.0.1) port 5860 (#0)
> GET /product-service/product HTTP/1.1
> Host: localhost:5860
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 0
<
* Connection #0 to host localhost left intact
有人可以帮我解决我所缺少的吗?我想从网关得到相同的响应。
您的应用程序似乎暴露了 /product/
端点。
从网关,您正在尝试从 /product-service/product
重定向到 /product/
服务。
默认情况下,spring 云网关按原样重定向到 Uris。所以目前,我认为 http://localhost:5860/product-service/product
被重定向到 http://localhost:5861/product-service/product
。
如果您需要从 product-service/**
重定向到 product-service 的 /**
,请使用 RewritePath
过滤器。
下面是一个可能适合您的用法示例:
spring:
cloud:
gateway:
routes:
- id: product_service
uri: localhost:5861/
predicates:
- Path=/product-service/**
filters:
- RewritePath=/product-service/(?<segment>/?.*),$\{segment}
工作更新:
spring:
cloud:
gateway:
routes:
- id: product_service
uri: http://localhost:5861/
predicates:
- Path=/product
我正在尝试使用 Spring 云网关来路由我的微服务,但即使微服务按预期工作,网关路由 returns 也是一个空响应。
我的微服务是一个简单的应用程序,它在端口 5861
上 运行。在使用特定路径进行路由试验后,我通过预测所有情况以确保它已路由,将我的网关路由到它。
这是我的网关配置文件:
spring:
cloud:
gateway:
routes:
- id: product_service
uri: localhost:5861/
predicates:
- Path=/product-service/**
在 运行 服务并命中它们之后,我的微服务 returns 正确响应:
$ curl -v http://localhost:5861/product/
* Trying 127.0.0.1:5861...
* Connected to localhost (127.0.0.1) port 5861 (#0)
> GET /product/ HTTP/1.1
> Host: localhost:5861
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Wed, 01 Jun 2022 19:41:40 GMT
<
* Connection #0 to host localhost left intact
[{"id":1,"name":"Apple","price":2},{"id":2,"name":"Apple","price":2},{"id":3,"name":"Apple","price":2}]
但是,如果我尝试从我的 API 网关执行此操作,它 returns 什么都没有,如果我尝试从我的浏览器访问它,则会出现一个空白页面。
$ curl -v http://localhost:5860/product-service/product
* Trying 127.0.0.1:5860...
* Connected to localhost (127.0.0.1) port 5860 (#0)
> GET /product-service/product HTTP/1.1
> Host: localhost:5860
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 0
<
* Connection #0 to host localhost left intact
有人可以帮我解决我所缺少的吗?我想从网关得到相同的响应。
您的应用程序似乎暴露了 /product/
端点。
从网关,您正在尝试从 /product-service/product
重定向到 /product/
服务。
默认情况下,spring 云网关按原样重定向到 Uris。所以目前,我认为 http://localhost:5860/product-service/product
被重定向到 http://localhost:5861/product-service/product
。
如果您需要从 product-service/**
重定向到 product-service 的 /**
,请使用 RewritePath
过滤器。
下面是一个可能适合您的用法示例:
spring:
cloud:
gateway:
routes:
- id: product_service
uri: localhost:5861/
predicates:
- Path=/product-service/**
filters:
- RewritePath=/product-service/(?<segment>/?.*),$\{segment}
工作更新:
spring:
cloud:
gateway:
routes:
- id: product_service
uri: http://localhost:5861/
predicates:
- Path=/product