在Java中尝试对Google pubsub执行同步拉取时出错
我试图使用GooglePubSub订阅在Java中执行同步拉入,但是当我使用文档化的进程()时,我得到了一个错误 我已经能够在同一台服务器上用Python执行相同的函数,它返回正确的消息。所以我知道这个盒子没问题。看起来这是我的Java进程的一个问题在Java中尝试对Google pubsub执行同步拉取时出错,java,google-cloud-pubsub,Java,Google Cloud Pubsub,我试图使用GooglePubSub订阅在Java中执行同步拉入,但是当我使用文档化的进程()时,我得到了一个错误 我已经能够在同一台服务器上用Python执行相同的函数,它返回正确的消息。所以我知道这个盒子没问题。看起来这是我的Java进程的一个问题 public void readBucket() { try { List<ReceivedMessage> myMessage = createSubscriberWithSyncPull("my-projec
public void readBucket() {
try {
List<ReceivedMessage> myMessage = createSubscriberWithSyncPull("my-project", "my-subscription", 1);
} catch (Exception e) {
e.printStackTrace();
}
}
static List<ReceivedMessage> createSubscriberWithSyncPull(
String projectId, String subscriptionId, int numOfMessages) throws Exception {
// [START pubsub_subscriber_sync_pull]
SubscriberStubSettings subscriberStubSettings =
SubscriberStubSettings.newBuilder()
.setTransportChannelProvider(
SubscriberStubSettings.defaultGrpcTransportProviderBuilder()
.setMaxInboundMessageSize(20 << 20) // 20MB
.build())
.build();
try (SubscriberStub subscriber = GrpcSubscriberStub.create(subscriberStubSettings)) {
String subscriptionName = ProjectSubscriptionName.format(projectId, subscriptionId);
PullRequest pullRequest =
PullRequest.newBuilder()
.setMaxMessages(numOfMessages)
.setReturnImmediately(true) // return immediately if messages are not available
.setSubscription(subscriptionName)
.build();
// use pullCallable().futureCall to asynchronously perform this operation
PullResponse pullResponse = subscriber.pullCallable().call(pullRequest);
List<String> ackIds = new ArrayList<>();
for (ReceivedMessage message : pullResponse.getReceivedMessagesList()) {
// handle received message
// ...
ackIds.add(message.getAckId());
}
// acknowledge received messages
AcknowledgeRequest acknowledgeRequest =
AcknowledgeRequest.newBuilder()
.setSubscription(subscriptionName)
.addAllAckIds(ackIds)
.build();
// use acknowledgeCallable().futureCall to asynchronously perform this operation
subscriber.acknowledgeCallable().call(acknowledgeRequest);
return pullResponse.getReceivedMessagesList();
}
// [END pubsub_subscriber_sync_pull]
}
我收到以下错误消息:
2019-09-04 15:01:00,727 - ERROR [MapReduceRunner-phase-1:i.c.c.i.a.r.ProgramControllerServiceAdapter$1@97] - MapReduce Program 'phase-1' failed.
java.lang.Exception: com.google.pubsub.v1.StreamingPullRequest.emptyIntList()Lcom/google/protobuf/Internal$IntList;
at io.cdap.cdap.internal.app.runtime.AbstractContext.lambda$initializeProgram$1(AbstractContext.java:645) ~[na:na]
at io.cdap.cdap.internal.app.runtime.AbstractContext.execute(AbstractContext.java:600) ~[na:na]
at io.cdap.cdap.internal.app.runtime.AbstractContext.initializeProgram(AbstractContext.java:637) ~[na:na]
at io.cdap.cdap.internal.app.runtime.batch.MapReduceRuntimeService.beforeSubmit(MapReduceRuntimeService.java:547) ~[na:na]
at io.cdap.cdap.internal.app.runtime.batch.MapReduceRuntimeService.startUp(MapReduceRuntimeService.java:226) ~[na:na]
at com.google.common.util.concurrent.AbstractExecutionThreadService$1$1.run(AbstractExecutionThreadService.java:47) ~[com.google.guava.guava-13.0.1.jar:na]
at io.cdap.cdap.internal.app.runtime.batch.MapReduceRuntimeService$2$1.run(MapReduceRuntimeService.java:450) [na:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_222]
Caused by: java.lang.NoSuchMethodError: com.google.pubsub.v1.StreamingPullRequest.emptyIntList()Lcom/google/protobuf/Internal$IntList;
at com.google.pubsub.v1.StreamingPullRequest.<init>(StreamingPullRequest.java:30) ~[na:na]
at com.google.pubsub.v1.StreamingPullRequest.<clinit>(StreamingPullRequest.java:1594) ~[na:na]
at com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub.<clinit>(GrpcSubscriberStub.java:149) ~[na:na]
2019-09-04 15:01:00727-错误[MapReduceRunner-phase-1:i.c.c.i.a.r.程序控制器服务适配器$1@97]-MapReduce程序“第1阶段”失败。
java.lang.Exception:com.google.pubsub.v1.StreamingPullRequest.emptyIntList()Lcom/google/protobuf/Internal$IntList;
在io.cdap.cdap.internal.app.runtime.AbstractContext.lambda$initializeProgram$1(AbstractContext.java:645)~[na:na]
在io.cdap.cdap.internal.app.runtime.AbstractContext.execute(AbstractContext.java:600)~[na:na]
在io.cdap.cdap.internal.app.runtime.AbstractContext.initializeProgram(AbstractContext.java:637)~[na:na]
在io.cdap.cdap.internal.app.runtime.batch.mapreducerontimeservice.beforesmit(mapreducerontimeservice.java:547)~[na:na]
在io.cdap.cdap.internal.app.runtime.batch.mapreducerontimeservice.startUp(mapreducerontimeservice.java:226)~[na:na]
在com.google.common.util.concurrent.AbstractExecutionThreadService$1$1.run(AbstractExecutionThreadService.java:47)~[com.google.guava.guava-13.0.1.jar:na]
在io.cdap.cdap.internal.app.runtime.batch.MapReduceUrontimeservice$2$1.run(MapReduceUrontimeservice.java:450)[na:na]
在java.lang.Thread.run(Thread.java:748)[na:1.8.0_222]
原因:java.lang.NoSuchMethodError:com.google.pubsub.v1.StreamingPullRequest.emptyIntList()Lcom/google/protobuf/Internal$IntList;
在com.google.pubsub.v1.StreamingPullRequest.(StreamingPullRequest.java:30)~[na:na]
在com.google.pubsub.v1.StreamingPullRequest.(StreamingPullRequest.java:1594)~[na:na]
在com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub.(GrpcSubscriberStub.java:149)~[na:na]
欢迎任何帮助 错误消息与此其他问题类似: 如果是这样的话,包括
protobufjava
依赖项将在您使用maven时修复它。谢谢。这(几乎)是正确的答案。实际上,在我的例子中,依赖项已经包含在内,但它指向的是一个早期版本。将此更新为最新版本(3.9.1)修复了此问题。
2019-09-04 15:01:00,727 - ERROR [MapReduceRunner-phase-1:i.c.c.i.a.r.ProgramControllerServiceAdapter$1@97] - MapReduce Program 'phase-1' failed.
java.lang.Exception: com.google.pubsub.v1.StreamingPullRequest.emptyIntList()Lcom/google/protobuf/Internal$IntList;
at io.cdap.cdap.internal.app.runtime.AbstractContext.lambda$initializeProgram$1(AbstractContext.java:645) ~[na:na]
at io.cdap.cdap.internal.app.runtime.AbstractContext.execute(AbstractContext.java:600) ~[na:na]
at io.cdap.cdap.internal.app.runtime.AbstractContext.initializeProgram(AbstractContext.java:637) ~[na:na]
at io.cdap.cdap.internal.app.runtime.batch.MapReduceRuntimeService.beforeSubmit(MapReduceRuntimeService.java:547) ~[na:na]
at io.cdap.cdap.internal.app.runtime.batch.MapReduceRuntimeService.startUp(MapReduceRuntimeService.java:226) ~[na:na]
at com.google.common.util.concurrent.AbstractExecutionThreadService$1$1.run(AbstractExecutionThreadService.java:47) ~[com.google.guava.guava-13.0.1.jar:na]
at io.cdap.cdap.internal.app.runtime.batch.MapReduceRuntimeService$2$1.run(MapReduceRuntimeService.java:450) [na:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_222]
Caused by: java.lang.NoSuchMethodError: com.google.pubsub.v1.StreamingPullRequest.emptyIntList()Lcom/google/protobuf/Internal$IntList;
at com.google.pubsub.v1.StreamingPullRequest.<init>(StreamingPullRequest.java:30) ~[na:na]
at com.google.pubsub.v1.StreamingPullRequest.<clinit>(StreamingPullRequest.java:1594) ~[na:na]
at com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub.<clinit>(GrpcSubscriberStub.java:149) ~[na:na]