在 pubsub 模拟器上创建主题

T. *_*Yoo 7 java google-cloud-endpoints google-cloud-platform google-cloud-pubsub

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

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

PUT http://localhost:8085/v1/projects/testproject/topics/test
Run Code Online (Sandbox Code Playgroud)

一切正常,主题被创建。但是,如果我运行以下代码段,则不会按预期工作,也不会创建任何主题:

    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);
Run Code Online (Sandbox Code Playgroud)

运行此模拟器时记录

[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.
Run Code Online (Sandbox Code Playgroud)

我在 ChannelProvider 上遗漏了什么吗?或者我没有正确配置我的 TopicAdminClient?我看不出有什么问题,因为我用 它作为参考

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

Kam*_*osn 5

用于与模拟器通信的通道需要将该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();
  }
}
Run Code Online (Sandbox Code Playgroud)