java - 本地 GAE java 开发服务器的 Google Pub/Sub 测试策略

标签 java google-app-engine google-cloud-pubsub

我和我的团队非常希望在我们的应用程序中包含 Google Pub/Sub,因为它将解决一些耦合问题。 我们遇到的问题是如何结合 java appengine 开发服务器进行本地集成测试。

到目前为止我做了什么:

  1. 启动发布子模拟器并设置 PUBSUB_EMULATOR_HOST 环境变量
  2. 在 Java 开发服务器中启动我们的应用程序 它创建主题和订阅,然后发送一些消息 到主题。

我假设我做错了什么,因为:

  • 在云中创建的主题和订阅(当然他们应该在 pubsub 模拟器中创建?)
  • 消息被推送,我们收到返回的消息 ID,但没有到达端点,也没有在云端或模拟器中报告错误。

据此我很确定开发服务器没有选择模拟器。

关于我们的测试策略,我还有一些更深层次的问题。在这个越来越多的服务绑定(bind)到云的时代,本地集成测试真的可行吗?我们是否应该更多地关注针对云实例本身运行的集成测试套件?如果是这样,如何确保开发人员在部署到云测试环境之前对他们的代码有信心,这不会显着增加反馈循环吗?

更新

使用 Google Java API 客户端 PubSub 构建器类,我能够从本地配置中注入(inject)一个 url (localhost:8010),现在我可以成功发布到本地模拟器。

Pubsub client = new Pubsub.Builder(httpTransport, jsonFactory, initializer)
.setApplicationName(getProjectId())
.setRootUrl(rootUrl).build();

我强制使用端口来简化我团队其他成员的设置,而不必依赖于动态变化的端口。

gcloud beta emulators pubsub start --host-port localhost:8010

现在主题、订阅和消息已在模拟器上成功创建。不幸的是,我仍然没有将消息推送到注册的端点。

更新 2

gcloud 版本 120.0.0 似乎有所改善,但我现在收到以下错误:

{
  "code" : 400,
  "message" : "Payload isn't valid for request.",
  "status" : "INVALID_ARGUMENT"
}

最佳答案

gcloud 实用程序的最新更新是否已修复本地 pubsub 服务器。这个问题解决了它:https://code.google.com/p/cloud-pubsub/issues/detail?id=41

关于java - 本地 GAE java 开发服务器的 Google Pub/Sub 测试策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674986/

相关文章:

java - 错误: method cleanCart in class Database cannot be applied to given types

google-app-engine - 谷歌发布订阅 : UNAVAILABLE: The service was unable to fulfill your request

java - 应用程序默认凭据无法创建 Google App Engine 服务帐户凭据

python - Google App Engine 不断部署新实例,或者根本不部署(服务器错误)

gmail-api - 收到gmail users.watch API的推送通知后如何读取用户的gmail?

go - 如何通过转发到死信主题来限制 Google Pub/Sub 传送尝试?

java - 我不知道如何使用 Scanner 类的函数

java - 从文件中读取模式与字符串文字

java jsscrollpane

google-app-engine - "Usage History"在 Google App Engine 新控制台中的位置