spring-boot - 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。
我该如何解决这个问题?
解决方案
我认为问题在于您在配置文件中用于路由请求的 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
而且您使用的网址似乎不适合这个。
无论如何,我认为在应用程序引擎等无服务器环境中,执行服务发现和通过网关路由请求的最佳选择是使用谷歌提供的服务。在服务发现的情况下,它是自动完成的,如果你想要一个网关,你可以使用与应用引擎有很大集成的谷歌云端点。因为这是用于这些应用程序的网关
推荐阅读
- angular - 无法使量角器(ng e2e)在 azure 上工作 - “找不到模块 ./app-automate”
- node.js - 获取 24 小时前的 X 条记录 Mongoose
- javascript - 使用 API 从客户端保存图像
- sublimetext3 - 自动换行时如何自动换行
- php - laravel 中的同步功能无法按预期工作
- angular - 将 @Input 限制为 Angular 中的预定义值列表
- python - Python 抛出一个 MemoryError,当我安装的 RAM 量无论如何应该能够容纳我提供给列表变量的内容时
- google-sheets - 根据复选框过滤工作簿中的所有工作表(在 Google 表格中)
- mongodb - Mongoose 总结具有相同别名的子文档数组元素
- android-studio - 使用 Geofire 不显示标记