Как обрабатывать сбой Apache Pulsar Consumer.acknowledgeAsync()?
Я использую Consumer.acknowledgeAsync() для подтверждения сообщений в моем Java-сервисе, и мне было интересно, что произойдет, если подтверждение не получится? Должен ли я повторить операцию несколько раз и отказаться от своего потребителя, когда повторные попытки исчерпаны?
Я считаю количество сообщений, обрабатываемых для контроля потока, чтобы ограничить использование памяти.
1 ответ
Решение
Обычно, если сообщение не было успешно подтверждено, после ackTimeout сообщение будет снова доставлено от посредника к потребителю. Так что здесь, в большинстве случаев, нет необходимости повторять.
может быть, такой обработки достаточно:
consumer.acknowledgeAsync(msgId)
.thenAccept(consumer -> successHandlerMethod())
.exceptionally(exception -> failHandlerMethod());