Google App Engine Java 11 - 不清楚的错误 com.google.apphosting.api.ApiProxy$CallNotFoundException

Google App Engine Java 11 - unclear errors com.google.apphosting.api.ApiProxy$CallNotFoundException

我们目前正在使用捆绑服务 (https://cloud.google.com/blog/products/serverless/support-for-app-engine-services-in-second-generation-runtimes) 将 App Engine 从 Java 8 迁移到 Java 11。

我们已经做到了,应用程序似乎 运行 符合预期 - BE、FE 和 Datastore 似乎都可以在我们的暂存 GCP 项目中使用。

但是,以下错误每 10 秒就会出现在我们的日志中:

Failed to query GCE metadata service

然后

java.io.IOException: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:70)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:609)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:488)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.readResponse(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.queryMetadataAttribute(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.getProjectId(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GcpHubClient.registerDebuggee(Unknown Source)
Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.apphosting.api.ApiProxy$CallNotFoundException.foreignThread(ApiProxy.java:844)
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:117)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:54)
... 6 more

编辑: 云调试器显示“调试器找不到应用程序的调试目标”。尽管这些版本仍然依赖于 Java 8 工作,但迁移正确设置调试器缺少哪些额外步骤?由于我们使用的是 App Engine 标准环境,因此默认情况下应启用它 (https://cloud.google.com/debugger/docs/setup/java#gae-standard)。

编辑 2: 看起来这可能是一个 Google Cloud Debugger 错误: https://github.com/GoogleCloudPlatform/cloud-debug-java/issues/18

根据 App Engine documentation regarding issuing HTTP requests,如果您使用 URL Fetch,它会导致对云客户端库的请求(其中包括 Google Cloud Debugger Client for Java) 失败。

在使用捆绑服务时,我们仍在使用 appengine-web.xml 文件。

我们在那里有以下行:

<url-stream-handler>urlfetch</url-stream-handler>

删除该行为我们解决了问题。