ActiveMQ - не удается откатить не прошедший сеанс INVIDUAL_ACK - PullRequest
1 голос
/ 02 мая 2019

Можно ли откатить асинхронно обработанное сообщение в ActiveMQ?Я использую следующее сообщение, пока первое еще обрабатывается, поэтому при попытке отката первого сообщения в другом потоке (не в пуле activemq) я получаю сообщение об ошибке выше.В конце концов я должен передать сообщение DLQ вручную?

1 Ответ

1 голос
/ 07 мая 2019

Обработка ошибок в сообщениях может работать несколькими способами:

  1. «Политика повторной доставки» на стороне брокера.Когда клиент вызывает число отката n раз (по умолчанию обычно 6 попыток) раз и брокер автоматически перемещает сообщение в очередь недоставленных сообщений (DLQ)
  2. на стороне клиента.Приложение получает сообщение и затем отправляет его в DLQ.

Вариант № 1 подходит для незапланированных / плановых отключений - отключение базы данных и т. Д. Если требуется автоматическая повторная попытка.Политику повторной доставки также можно настроить, когда клиент подключается к брокеру.

Опция # 2 подходит для сценариев «неверных данных», когда вы знаете, что сообщение никогда не сможет быть обработано.Это идеально, потому что вы можете переместить сообщение при первом обращении и не должны отклонять сообщение n раз.

Когда вы объединяете бесконечную повторную попытку с # 1 и включаете # 2 в свой поток приложения, выможет иметь надежную последовательность процессов: автоматическая повторная попытка и быстрое перемещение неверных данных.Лучший представитель породы =)

Политика доставки ActiveMQ

...