首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pubsub模拟器上创建主题

在pubsub模拟器上创建主题
EN

Stack Overflow用户
提问于 2017-04-27 11:57:44
回答 2查看 7K关注 0票数 9

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

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

代码语言:javascript
复制
PUT http://localhost:8085/v1/projects/testproject/topics/test

一切都很好,主题就会被创建。但是,如果我运行以下代码段,任何操作都不会按预期进行,也不会创建任何主题:

代码语言:javascript
复制
    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);

在运行此程序时,模拟器将记录

代码语言:javascript
复制
[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?自从我使用此为参考以来,我看不出有什么不对。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-02 20:04:43

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

代码语言:javascript
复制
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();
  }
}
票数 6
EN

Stack Overflow用户

发布于 2019-05-08 01:36:16

这个帖子有点老了,希望这能起到更新的作用。

来自用模拟器在本地测试应用程序用模拟器在本地测试应用程序也能工作。如果您遵循链接页面上的“查看GitHub”链接,则完整的片段在GitHub上。

代码语言:javascript
复制
String hostport = System.getenv("PUBSUB_EMULATOR_HOST");
ManagedChannel channel = ManagedChannelBuilder.forTarget(hostport).usePlaintext().build();
try {
  TransportChannelProvider channelProvider =
      FixedTransportChannelProvider.create(GrpcTransportChannel.create(channel));
  CredentialsProvider credentialsProvider = NoCredentialsProvider.create();

  TopicAdminClient topicClient =
      TopicAdminClient.create(
          TopicAdminSettings.newBuilder()
              .setTransportChannelProvider(channelProvider)
              .setCredentialsProvider(credentialsProvider)
              .build());
  try {
      response = topicClient.createTopic(topicName);
      System.out.printf("Topic %s created.\n", response);
  } catch (ApiException e) {
      System.out.println(e.getStatusCode().getCode());
      System.out.println(e.isRetryable());
      System.out.println("No topic was created.");
  }

} finally {
  channel.shutdown();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43657112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档