gpt4 book ai didi

java - Google PubSub 重新发送的消息未得到处理

转载 作者:行者123 更新时间:2023-12-02 10:32:35 24 4
gpt4 key购买 nike

我使用了 Google PubSub 的 Google 文档中的订阅者示例我所做的唯一修改是注释掉消息的确认。

订阅者不再向队列添加消息,而应根据 Google 云控制台中设置的时间间隔重新发送消息。

为什么会发生这种情况或者我错过了什么?

public class SubscriberExample {

use the default project id
private static final String PROJECT_ID = ServiceOptions.getDefaultProjectId();

private static final BlockingQueue<PubsubMessage> messages = new LinkedBlockingDeque<>();

static class MessageReceiverExample implements MessageReceiver {



@Override
public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
messages.offer(message);

//consumer.ack();
}
}
/** Receive messages over a subscription. */
public static void main(String[] args) throws Exception {
// set subscriber id, eg. my-sub
String subscriptionId = args[0];
ProjectSubscriptionName subscriptionName = ProjectSubscriptionName.of(
PROJECT_ID, subscriptionId);
Subscriber subscriber = null;
try {
// create a subscriber bound to the asynchronous message receiver
subscriber = Subscriber.newBuilder(subscriptionName, new MessageReceiverExample()).build();
subscriber.startAsync().awaitRunning();
// Continue to listen to messages
while (true) {
PubsubMessage message = messages.take();
System.out.println("Message Id: " + message.getMessageId());
System.out.println("Data: " + message.getData().toStringUtf8());
}
} finally {
if (subscriber != null) {
subscriber.stopAsync();
}
}
}
}

最佳答案

当您不确认消息时,Java 客户端库将调用 modifyAckDeadline直到 maxAckExtensionPeriod通过。默认情况下,该值为一小时。因此,如果您不确认/不确认消息或更改此值,则消息可能在一小时内不会重新传送。如果您想更改最大确认延长期限,请在构建器上设置:

subscriber = Subscriber.newBuilder(subscriptionName, new MessageReceiverExample())
.setMaxAckExtensionPeriod(Duration.ofSeconds(60))
.build();

还值得注意的是,当你没有ack或nack消息时,那么flow control可能会阻止更多消息的传递。默认情况下,Java 客户端库允许最多 1000 条消息处于未完成状态,即等待 ack 或 nack 或等待最大 ack 延长周期过去。

关于java - Google PubSub 重新发送的消息未得到处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com