【发布时间】:2017-03-26 01:04:57
【问题描述】:
我有一个在 Google Compute Engine 实例中运行的 Java 应用程序。我正在尝试使用 google-cloud library 将消息发布到 Cloud Pub/Sub 主题,但我收到了 DEADLINE_EXCEEDED 异常。代码如下所示:
PubSub pubSub = PubSubOptions.getDefaultInstance().toBuilder()
.build().getService();
String messageId = pubSub.publish(topic, message);
结果是:
com.google.cloud.pubsub.PubSubException:io.grpc.StatusRuntimeException:DEADLINE_EXCEEDED
documentation 表明此响应通常是由网络问题引起的。我需要在“网络”部分进行配置以允许 Compute Engine 访问 Pub/Sub 吗?存在默认允许内部防火墙规则。
我已将我的 Compute Engine 服务帐号设为 Pub/Sub 主题权限的编辑者和发布者。
应用驻留在 Container Engine 管理的 Compute Engine 实例内的 Docker 容器中。 Pub/Sub 主题和 Compute Engine 实例在同一个项目中。我可以使用 google-cloud 库连接到其他云平台服务,例如 Datastore。我还可以从同一个项目中的 App Engine 实例发布到同一个 Pub/Sub 主题。
使用 google-api-services-pubsub API 库而不是 google-cloud 会更幸运吗?
【问题讨论】:
-
这是在黑暗中拍摄的,但是您发送请求的机器上的日期/时间是否准确?
-
它似乎是准确的,是的。
-
您在使用 gcloud 时是否遇到同样的问题? cloud.google.com/sdk/gcloud/reference/alpha/pubsub/topics/…
-
不,我不知道。我可以从该 VM 实例上的命令行很好地运行
gcloud alpha pubsub topics publish ...,我得到一个messageId作为响应。 gcloud 发起的消息也会传递给订阅者,而应用程序的消息永远不会这样做。 -
我还确认通过 google-api-services-pubsub 库使用 API 是可行的。这似乎是 google-cloud-java 库的问题。
标签: java google-compute-engine google-cloud-platform google-cloud-pubsub