如何解决Java:Google PubSub 服务器在确认截止时间10 秒后不重新发送消息
Google PubSub 服务器在确认截止时间(即 10 秒)后不重新发送消息
在这里,我在 50 秒后确认,但没有收到任何重新发送的消息。但是重启订阅者后会得到。
Subscriber subscriber = null;
ProjectSubscriptionName subscriptionName = ProjectSubscriptionName.of(projectIdArg,subscriptionNameArg);
try {
MessageReceiver receiver =
(PubsubMessage message,AckReplyConsumer consumer) -> {
int i=0;
while(i<=50){
try {
Thread.sleep(1000);
System.out.println(i+" : message id : "+messageId);
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
consumer.ack();
};
ExecutorProvider executorProvider = InstantiatingExecutorProvider
.newBuilder()
.setExecutorThreadCount(5)
.build();
subscriber = Subscriber
.newBuilder(subscriptionName,receiver)
.setParallelPullCount(1)
.setExecutorProvider(executorProvider)
.build();
subscriber.startAsync().awaitRunning();
subscriber.awaitTerminated();
} catch (Exception e) {
log.error("Error in Subscribing Queue. " + e);
if (subscriber != null) {
subscriber.stopAsync().awaitTerminated();
}
}
解决方法
我发现了背后发生的事情。即使确认截止时间是 10 秒并且进程花费的时间超过这个时间,也会扩展到订阅者 maxAckExtensionPeriod 配置,该配置具有一小时的默认值。一小时后发布-订阅服务器将重试,此重试也将发生一次,因为如果进程超过一小时,此值也会扩展到之前的最大处理时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。