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, и потребитель умер, как только тестовый пример был завершен, но сообщение все еще ожидало повторной доставки.

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