首页 > 解决方案 > App 引擎上的 Spring Cloud Gateway 未将请求路由到下游服务

问题描述

我正在尝试在 GAE 中部署一个简单的微服务应用程序(Spring boot)。该应用程序有 3 个服务 - 1. 发现服务 2. Spring Cloud Gateway 3. 客户服务

我正在尝试通过 API 网关调用 API。这在本地机器上工作正常,但在 GAE 托管应用程序中得到 404。

我使用的 URL 是 - https://Gateway-url/customer-service/version 对应的 YAML 配置是:

spring:
  cloud:
    gateway:     
      routes:
      -id: customer-service
        uri: https://XXXXXX.customer-service.appspot.com/
        predicates:
        - Path=/customer-service/**       
        filters:
        - StripPrefix=1

上面代码段中配置的 URI 是 - GAE 服务的目标 URL。

因此,当我在浏览器中点击https://Gateway-url/customer-service/version url 时,我收到 404 错误,但如果我点击直接 url https://customer-service-url/version它可以工作

当我在本地环境中更改 API 网关配置(将 uri 更改为基于云的服务 uri)时,问题是可重现的。所以我认为网关无法将请求路由到 App Engine 服务目标 URL。

我该如何解决这个问题?

标签: spring-bootgoogle-app-enginegoogle-cloud-platformmicroservicesspring-cloud-gateway

解决方案


我认为问题在于您在配置文件中用于路由请求的 url。根据谷歌云文档,要从一个服务调用另一个服务,您应该使用这样的端点

https://VERSION_ID-dot-SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com

正如你在这里看到的那样 https://cloud.google.com/appengine/docs/standard/java/communicating-between-services

而且您使用的网址似乎不适合这个。

无论如何,我认为在应用程序引擎等无服务器环境中,执行服务发现和通过网关路由请求的最佳选择是使用谷歌提供的服务。在服务发现的情况下,它是自动完成的,如果你想要一个网关,你可以使用与应用引擎有很大集成的谷歌云端点。因为这是用于这些应用程序的网关


推荐阅读