Я использую Consumer.acknowledgeAsync () для подтверждения сообщений в моей службе Java, и мне было интересно, что произойдет, если подтверждение не удастся? Должен ли я повторить операцию несколько раз и отказаться от потребителя, когда попытки будут исчерпаны?
Я подсчитываю количество сообщений, обрабатываемых для управления потоком, чтобы ограничить использование памяти.




Обычно, если сообщение не было успешно подтверждено, после ackTimeout сообщение будет повторно доставлено от брокера к потребителю. Так что здесь, в большинстве случаев, повторять попытку не нужно.
может быть, такой обработки будет достаточно:
consumer.acknowledgeAsync(msgId)
.thenAccept(consumer -> successHandlerMethod())
.exceptionally(exception -> failHandlerMethod());
Повторная доставка в моем случае прекрасна (управление потоком), поэтому я могу просто посчитать сообщение как подтвержденное и предположить, что оно сработает.
Это зависит от обстоятельств, правда? Если бы существовало универсальное решение, они бы не заставили вас справиться с ним самостоятельно; они просто, понимаете, сделают это.