当前位置: 首页 > 知识库问答 >
问题:

应用引擎上的Spring云网关没有将请求路由到下游服务

蓝星辰
2023-03-14

我试图在GAE中部署一个简单的微服务应用程序(Spring boot)。该应用程序有3个服务-1。发现服务2。Spring云网关3。客户服务

我试图通过API网关调用API。这在本地机器上运行良好,但在GAE托管的应用程序中获得404。

我使用的URL是-https://Gateway-url/client-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 Service目标URL。

我如何解决这个问题?

共有1个答案

范朗
2023-03-14

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

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

似乎您使用的url不适合此。

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

 类似资料:
  • 我使用Spring创建微服务。我使用Eureka进行服务发现,使用Zuul进行路由。现在我想切换到Spring Cloud Gateway(因为它的非阻塞特性),但是我没有找到自动路由到每个Eureka服务的方法。 例如,如果一个服务'eureka-client'注册到了Eureka,那么Zuul本身就为这个服务提供了类似于localhost:8762/eureka-client的路径。使用Spr

  • 我需要创建一个反向代理,接收传入的请求,并基于请求正文的内容,将请求路由到特定的URI。 这是一个路由微服务,它类似于反向代理,根据来自每个请求主体的一些信息进行路由。这意味着对于每个请求,我需要解析请求正文并获得“username”字段,然后建立JDBC连接以从数据库中获取附加信息。根据数据库中的信息,它最终将请求重定向到正确的URI。 从我现在所拥有的,我有2个阻止方法。第一个是请求主体的解析

  • 我试图将使用工作的网关迁移到Spring Cloud网关,但遇到了请求路由问题。 下面是Spring Cloud Gateway配置的一个片段,我试图在其中配置一个等效的路由: 我使用Spring Cloud Eureka作为我的Discovery服务器(在一个单独的微服务中),并且我目前没有任何配置,如配置DiscoveryClient路由的谓词和过滤器中所述 如果我向发出请求,我将收到一个40

  • 我有一个Spring云网关、一个eureka服务注册中心和两个微服务器。我使用http://localhost:8081/auth直接向sevice发送请求没有问题。当我想使用网关http://localhost:8080/auth时,我总是得到404错误响应。服务和网关都连接到eureka服务器。下面是我的代码: 网关 Application.Properties: 主要: 主要: 我已经遍历了

  • 我正在使用Spring Cloud(hoxton.sr10)和Spring Boot(2.2.6.release) 我在尤里卡服务器8761注册了我的服务 gateway mainClass java

  • 我们使用的实现以编程方式实现路由。我们有两个服务,它们应该在相同的路由路径上注册,如果另一个不存在,其中一个将作为后备。具有特定路径的首选路由是: 因此,当调用时,应该使用第一条路由,而当调用时,应该使用第二条路由。 问题是,即使是路线上的order属性似乎也不能解决这个问题;目前,我们发现没有可能设置这种路线的顺序/优先级。这是intender吗?