ActiveMQ - сообщение, отправленное в несколько очередей, застревает в очередях, если в любой очереди возникает исключение.
Я использую виртуальные места назначения для реализации модели публикации и подписки в ActiveMQ 5.15.13.
У меня виртуальная тема VirtualTopic
и к нему привязаны две очереди. У каждой очереди своя собственная политика повторной доставки. СкажемQueue 1
повторит сообщение 2 раза в случае возникновения исключения при обработке сообщения и Queue 2
повторит сообщение 3 раза. Сообщение о повторной отправке будет отправлено в очередь недоставленных сообщений.
Я заметил, что когда сообщение отправляется на VirtualTopic
, он доставляется в обе очереди. Я столкнулся с проблемой, когда потребители обеих очередей не могут успешно обработать сообщение. Сообщение предназначено дляQueue 1
помещается в очередь недоставленных сообщений после двух повторных попыток. Я ожидаю, что сообщение будет вQueue 2
будет мертвым после 3 попыток. Но сообщение повторяется потребителюQueue 2
только 2 раза, а затем застревает в Queue 2
как ожидающее сообщение.
В брокере activemq нет специальной конфигурации, и политика повторной доставки применяется программно. Есть ли какая-то конфигурация, которую мне не хватает?
1 ответ
Проблема была в моей реализации, поскольку для queue2 был создан новый экземпляр фабрики, и политика повторной доставки не настраивалась правильно. Сработала политика повторной доставки по умолчанию (максимальное количество повторных доставок =6, с некоторой задержкой), что вызвало задержку в повторно доставленном сообщении. Я тестировал поведение с помощью тестовых примеров junit, и потребитель умер, как только тестовый пример был завершен, но сообщение все еще ожидало повторной доставки.