java - 在 pubsub 模拟器上创建主题

标签 java google-cloud-platform google-cloud-pubsub google-cloud-endpoints google-cloud-pubsub-emulator

我开始使用 pubsub 模拟器来测试我的基本实现,但在尝试创建新主题时遇到了问题。

我的模拟器在 localhost:8085 上监听,如果我通过 api 创建主题

PUT http://localhost:8085/v1/projects/testproject/topics/test

一切正常,主题已创建。 但是,如果我运行以下代码片段,则没有任何效果,也没有创建任何主题:

    TopicName topicName = TopicName.create("testproject", "test");
    ChannelProvider channelProvider =
            TopicAdminSettings.defaultChannelProviderBuilder()
                .setEndpoint("localhost:8085")
                .setCredentialsProvider(
                        FixedCredentialsProvider.create(NoCredentials.getInstance()))
                .build();
    TopicAdminClient topicClient = TopicAdminClient.create(
            TopicAdminSettings.defaultBuilder().setChannelProvider(channelProvider).build());
        topicClient.createTopic(topicName);

运行时模拟器记录

[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.grpc.GrpcServer$3 operationComplete
[pubsub] INFORMATION: Adding handler(s) to newly registered Channel.
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
[pubsub] INFORMATION: Detected non-HTTP/2 connection.
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.NotFoundHandler handleRequest
[pubsub] INFORMATION: Unknown request URI: /bad-request
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.grpc.GrpcServer$3 operationComplete
[pubsub] INFORMATION: Adding handler(s) to newly registered Channel.
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
[pubsub] INFORMATION: Detected non-HTTP/2 connection.
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.NotFoundHandler handleRequest
[pubsub] INFORMATION: Unknown request URI: /bad-request

...    

[pubsub] Apr 27, 2017 1:10:49 PM io.gapi.emulators.grpc.GrpcServer$3 operationComplete
[pubsub] INFORMATION: Adding handler(s) to newly registered Channel.
[pubsub] Apr 27, 2017 1:10:49 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
[pubsub] INFORMATION: Detected non-HTTP/2 connection.

我的 ChannelProvider 上是否遗漏了什么?还是我没有正确配置 TopicAdminClient?我看不出有什么问题,因为我用过 this as reference .

也许有人可以帮我解决这个问题。

最佳答案

用于与模拟器通信的 channel 需要将 negotiationType 属性设置为 NegotiationType.PLAINTEXT。这意味着您需要创建自定义 ChannelProvider。像下面这样的东西应该可以工作:

public class PlainTextChannelProvider implements ChannelProvider {
  @Override
  public boolean shouldAutoClose() {
    return false;
  }

  @Override
  public boolean needsExecutor() {
    return false;
  }

  @Override
  public ManagedChannel getChannel() throws IOException {
    return NettyChannelBuilder.forAddress("localhost", 8085)
      .negotiationType(NegotiationType.PLAINTEXT)
      .build();
  }

  @Override
  public ManagedChannel getChannel(Executor executor) throws IOException {
    return getChannel();
  }
}

关于java - 在 pubsub 模拟器上创建主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43657112/

相关文章:

java - 如何在数据结构中压缩多个字符串?

google-cloud-platform - 在区域之间移动 Google Cloud Compute 实例

nginx - 在没有 GCP 负载均衡器的情况下创建 kubernetes nginx ingress

google-cloud-pubsub - 延迟消息处理并在处理之前删除

kubernetes - 使用 Helm 安装后如何更改Spinnaker配置?

java在控制台中绘制图形或树

java - 如何等待 Retrofit 异步 Web 服务调用? (调用.入队)

java - 如何从 Hibernate 用户类型检测数据库?

node.js - 2012、2016 gce windows 服务器是否已经安装了curl?

google-cloud-platform - GCP - 验证 PubSub 推送的云功能 https 端点的所有权