Как следует обрабатывать сбой Apache Pulsar Consumer.acknowledgeAsync ()?

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

Я подсчитываю количество сообщений, обрабатываемых для управления потоком, чтобы ограничить использование памяти.

Это зависит от обстоятельств, правда? Если бы существовало универсальное решение, они бы не заставили вас справиться с ним самостоятельно; они просто, понимаете, сделают это.

Michael 10.12.2018 12:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
285
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычно, если сообщение не было успешно подтверждено, после ackTimeout сообщение будет повторно доставлено от брокера к потребителю. Так что здесь, в большинстве случаев, повторять попытку не нужно.

может быть, такой обработки будет достаточно:

consumer.acknowledgeAsync(msgId)
    .thenAccept(consumer -> successHandlerMethod())
    .exceptionally(exception -> failHandlerMethod());

Повторная доставка в моем случае прекрасна (управление потоком), поэтому я могу просто посчитать сообщение как подтвержденное и предположить, что оно сработает.

David Tinker 10.12.2018 17:26

Другие вопросы по теме