JMS передают задержку возвращения

У меня есть клиент JMS, который может ssh к удаленным системам после получения сообщения (и сделайте различные вещи там - не относящийся к вопросу). Возможно, что сотни таких сообщений прибудут в короткий промежуток времени, который должен быть обработан как можно скорее.

Однако также возможно, что определенные удаленные системы не доступны, когда сообщение получено, таким образом, они должны быть отложены до позже (например, приблизительно 1 час). Лучшее решение состояло бы в том, чтобы отложить сообщение очереди с некоторым набором значений "задержки", который скажет брокеру JMS не пытаться передать сообщение снова в течение часа.

Что не в порядке: сон в получении распараллеливает и просыпается час спустя. Так как потребительское объединение сообщения ограничено (например, 8 доступных соединений), наличие 8 недостижимых систем заблокировало бы целую обработку излишне, которая недопустима.

Я не нашел установку или для сообщения или для самой очереди для такого значения "задержки", это существует?

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

9
задан egbokul 9 August 2010 в 10:58
поделиться

1 ответ

Это невозможно через JMS API до JMS 2.0. Как правило, транспорты сообщений оптимизированы для максимально быстрой доставки сообщений и не имеют планировщиков, которые удерживали бы сообщение для повторной доставки через некоторый произвольный интервал. Предполагая, что существует поставщик транспорта, у которого есть такая функциональность, все, что вы пишете, будет затем привязано к этому поставщику транспорта, потому что, хотя код может быть JMS-совместимым, само приложение будет полагаться на это поведение, зависящее от поставщика.

См. Ответ @ Shashi для ответа, который относится к версиям MQ, поддерживающим JMS 2.0.

3
ответ дан 4 December 2019 в 12:58
поделиться