繁体   English   中英

Java应用程序找不到访问GCP发布/订阅的凭据

[英]Java application cannot find credentials to access GCP Pub/Sub

我正在尝试使用GCP Java SDK通过以下代码将消息发送到Pub / Sub主题(在此代码段中使用占位符替换了实际的项目ID和主题名称):

Publisher publisher = null;
ProjectTopicName topic = ProjectTopicName.newBuilder()
        .setProject("MY_PROJECT_ID")
        .setTopic("MY_TOPIC")
        .build();

try {
    publisher = Publisher.newBuilder(topic).build();

    for (final String message : data) {
        ByteString messageBytes = ByteString.copyFromUtf8(message);
        PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(messageBytes).build();
        ApiFuture<String> future = publisher.publish(pubsubMessage);
    }
} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    if (publisher != null) {
        publisher.shutdown();
    }
}

这导致以下异常:

Exception in thread "main" java.lang.AbstractMethodError: com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.needsCredentials()Z
    at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:157)
    at com.google.cloud.pubsub.v1.stub.GrpcPublisherStub.create(GrpcPublisherStub.java:164)
    at com.google.cloud.pubsub.v1.Publisher.<init>(Publisher.java:171)
    at com.google.cloud.pubsub.v1.Publisher.<init>(Publisher.java:85)
    at com.google.cloud.pubsub.v1.Publisher$Builder.build(Publisher.java:718)
    at com.westonsankey.pubsub.MessageWriter.sendMessagesToPubSub(MessageWriter.java:35)
    at com.westonsankey.pubsub.MessageWriter.main(MessageWriter.java:24)

我已将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为指向JSON私钥文件,并确认可以使用该私钥访问此应用程序中的其他GCP资源。 该服务帐户具有项目所有者,并且我已经通过发布/订阅控制台验证了该服务帐户具有适当的权限。

使用发布/订阅进行身份验证是否需要任何其他步骤?

问题不在于访问凭据。 看来这是gax-java库上的版本冲突。 2019年6月在v1.46中添加了needsCredentials方法。也许您明确地依赖于旧版本,或者另一个依赖项正在引入旧版本并泄漏了其引入的版本。如果是前者,则更新以引入版本1.46或更高版本。 如果是后者,则可能需要遮蔽依赖项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM