com.google.cloud.pubsub.spi.v1.Publisher.publish未向PubSub发送数据

fig*_*aro 5 google-cloud-pubsub

对更新版本的调用com.google.cloud.pubsub.spi.v1.Publisher.publish(pubsubMessage).get()永远悬而未决.我不确定问题是什么.

代码段:

com.google.cloud.pubsub.spi.v1.Publisher publisher = Publisher.defaultBuilder(TopicName.parse("projects/" + projectId + "/topics/" + topicName))
            .setChannelProvider(TopicAdminSettings
                    .defaultChannelProviderBuilder()
                    .setCredentialsProvider(FixedCredentialsProvider.create(ServiceAccountCredentials.fromStream(new FileInputStream(keyFile))))
                    .build())
            .build();
ApiFuture<String> messageIdFuture = publisher.publish(pubsubMessage);
messageIdFuture.get() // HANGS FOREVER!!
Run Code Online (Sandbox Code Playgroud)

较旧的API可以正常工作:

GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(new NetHttpTransport())
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(serviceAccount)
            .setServiceAccountScopes(Arrays.asList(PubsubScopes.PUBSUB))
            .setServiceAccountPrivateKeyFromP12File(new File(keyFile))
            .build();

Pubsub pusub =  new Pubsub.Builder(transport, JSON_FACTORY, credential).setApplicationName("bigquery").build();

PubsubMessage pubsubMessage = new PubsubMessage();
pubsubMessage.encodeData(message.getBytes());

PublishRequest publishRequest = new PublishRequest();
publishRequest.setMessages(Arrays.asList(pubsubMessage));
pubsub.projects().topics().publish(outputTopic, publishRequest).execute();
Run Code Online (Sandbox Code Playgroud)

有人可以指出我错过了什么吗?

Ale*_*kov 0

我不知道为什么,但是一旦我添加了 guava 的编译依赖项, get 调用就不再挂起。

compile group: 'com.google.guava', name: 'guava', version: '23.0'
Run Code Online (Sandbox Code Playgroud)