У меня есть клиент JMS, который может подключаться по ssh к удаленным системам после получения сообщения (и делать там разные вещи - не имеет отношения к вопросу). Возможно, что за короткий период времени будут доставлены сотни таких сообщений, которые необходимо обработать как можно скорее.
Однако также возможно, что некоторые удаленные системы будут недоступны на момент получения сообщения, поэтому их следует отложить на более позднее время (например, на 1 час или около того). Лучшим решением было бы вернуть сообщение в очередь с некоторым заданным значением «задержки», которое укажет брокеру JMS не пытаться доставить сообщение снова в течение часа.
Что не нормально: спать в принимающей нити и просыпаться через час. Поскольку пул потребителей сообщений ограничен (например, доступно 8 подключений), наличие 8 недостижимых систем будет излишне блокировать всю обработку, что недопустимо.
Я не нашел настройки ни для сообщения, ни для самой очереди на такое значение "задержки", оно существует?
Обходное решение - использовать вторую очередь для хранения сообщений в недоступных системах и обрабатывать их отдельно. Но это не очень элегантное решение и требует дополнительного программирования. Возможно, есть способ получше.