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

使用Java中的Google Cloud PubSub模拟器

关志
2023-03-14

我已经设置了PubSub.builder,其根url指向本地PubSub模拟器(在我的例子中localhost:8036)。它似乎工作,我看到模拟器正在接收我的测试推送,但给我错误400错误的请求。

auth = GoogleCredential.getApplicationDefault(HTTP_TRANSPORT, JSON_FACTORY)
         .createScoped(PubsubScopes.all());
client = new Pubsub.Builder(HTTP_TRANSPORT, JSON_FACTORY, auth)
         .setApplicationName "test"
         .setRootUrl("http://localhost:8036/")
         .build();
msg = new PubsubMessage().encodeData("{\"a\": 1, \"b\": 2}".getBytes());
req = new PublishRequest().setMessages(Arrays.asList(msg));
client.projects()
  .topics()
  .publish("projects/GCLOUD-DEFAULT-PROJECT/topics/test-topic", req)
  .execute();
[pubsub] jan 27, 2016 9:03:20 PM com.google.cloud.pubsub.testing.v1.FakePubsubGrpcServer$2 operationComplete
[pubsub] INFO: Adding handler(s) to newly registered Channel.
[pubsub] jan 27, 2016 9:03:20 PM com.google.cloud.pubsub.testing.v1.NettyUtil$HttpVersionDecider channelRead
[pubsub] INFO: Detected non-HTTP/2 connection.
[pubsub] jan 27, 2016 9:03:20 PM com.google.cloud.pubsub.testing.v1.NettyUtil$HttpJsonAdapter channelRead
[pubsub] INFO: Invalid input: Expect message object but got: "\u001f�\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000�V�M-.NLO-V���VJI"
[pubsub] com.google.protobuf.InvalidProtocolBufferException: Expect message object but got: "\u001f�\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000�V�M-.NLO-V���VJI"
[pubsub]    at com.google.protobuf.util.JsonFormat$ParserImpl.mergeMessage(JsonFormat.java:1099)
[pubsub]    at com.google.protobuf.util.JsonFormat$ParserImpl.merge(JsonFormat.java:1075)
[pubsub]    at com.google.protobuf.util.JsonFormat$ParserImpl.merge(JsonFormat.java:973)
[pubsub]    at com.google.protobuf.util.JsonFormat$Parser.merge(JsonFormat.java:201)
[pubsub]    at com.google.cloud.pubsub.testing.v1.PubsubJsonGrpcAdapters$PublisherAdapter.handleRequest(PubsubJsonGrpcAdapters.java:231)
[pubsub]    at com.google.cloud.pubsub.testing.v1.NettyUtil$HttpJsonAdapter.channelRead(NettyUtil.java:94)
[pubsub]    at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:83)

如何将com.google.apis:google-api-services-pubsub库与本地模拟器一起使用?

共有1个答案

羊渝
2023-03-14

模拟器不要求或处理身份验证或授权;我猜这就是问题所在。可以尝试将null作为最后一个参数传递给生成器吗?

此外,似乎必须显式禁用Gzip压缩。请在生成器上设置这个:

.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
  @Override
  public void initialize(AbstractGoogleClientRequest<?> request) throws IOException {
    request.setDisableGZipContent(true);
  }
})
 类似资料:
  • 问题内容: 我们要模拟的其中一个Java类中有一个URL对象,但这是最后一个类,因此不能。我们不想上一个级别,并模拟InputStream,因为这仍然会使我们留下未经测试的代码(我们有严格的测试覆盖率标准)。 我已经尝试过jMockIt的反射功能,但是我们在Mac上工作,并且Java代理处理程序存在我无法解决的问题。 那么,有没有不涉及在junit测试中使用真实URL的解决方案? 问题答案: 当我

  • 我有一个jUnit测试,测试我的一个函数。在这个函数中,我调用了另一个类的方法,我想用mockito模拟这个方法。然而,我似乎不能实际嘲笑这一点。下面是我的jUnit测试的样子: 编辑:在我的MainClassImTesting()中。我正在调用的test()函数,它调用authenticateUser()并向它传递一个hashMap。

  • 问题内容: 我有一个使用当前时间进行一些计算的函数。我想使用模仿器模拟它。 我要测试的课程示例: 我想要类似的东西: 可以嘲笑吗?我不想更改“已测试”的代码以进行测试。 问题答案: 正确的做法是重组代码,使其更具可测试性,如下所示。重组代码以消除对Date的直接依赖关系将使您可以为正常运行时和测试运行时注入不同的实现:

  • 问题内容: 我对模拟还很陌生,并且我一直在尝试模拟实际内容(本质上仅在内存中创建一个虚拟文件),以便在任何时候都不会将任何数据写入磁盘。 我尝试过模拟文件和模拟尽可能多的属性的解决方案,然后还使用文件写入器/缓冲写入器将其写入,但是这些方法不能很好地工作,因为它们需要规范路径。有人找到了除此以外的解决方案,但我正在解决这个错误? 我一直在这样做: 任何想法或指导都将非常有帮助。在此之后的某个地方,

  • 问题内容: 我正在使用Google Cloud的Java数据存储客户端库访问Java数据存储。 注意 :我没有使用App Engine来部署我的应用程序;仅出于开发目的运行本地应用程序。 按照示例,我可以读取/写入Cloud Datastore。 我希望能够改为写入本地数据存储模拟器实例。按照这里的指南,我跑步。这显示在我的终端中: 我打开另一个终端并设置环境变量: 我运行应用程序并进行REST调

  • 问题内容: 我正在寻找模拟在Java中短时间内按住键盘键的操作。我希望下面的代码按住A键5秒钟,但是只按一次它(在记事本中测试时会产生一个“ a”)。我是否需要使用其他东西,或者我在这里使用awt.Robot类错了吗? 问题答案: Thread.sleep()阻止当前线程(按住键的线程)执行。 如果希望它在给定的时间内按住键,也许应该在并行线程中运行它。 这是一个解决Thread.sleep()问