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