У меня есть требование, о котором я сейчас не знаю, возможно ли это вообще.Я хотел бы временно отключить работу JMS-сообщения, если оно содержит указанное свойство.В настоящее время я использую HornetQ в качестве поставщика сообщений.
Давайте создадим пример:
Очередь содержит следующие три записи:
{1, "foo", "A_CATEGORY"}
{2, "bar", "B_CATEGORY"}
{9, "bof", "A_CATEGORY"}
В определенный момент приложениедолжен быть в состоянии сообщить серверу сообщений HornetQ, что сообщения, принадлежащие B_CATEGORY, не должны доставляться в данный момент (например, потому что базовая база данных для объектов B_CATEGORY обновляется).Таким образом, сообщение с идентификатором 2 не будет доставлено в данный момент, в то время как 1 и 9 будут доставлены, поскольку они имеют другое значение для объекта категории.
Это должно происходить из кода Java без перезапускаприложение на всех.Возможно ли это вообще?
Спасибо за помощь!
Просто подумал об альтернативном подходе к дизайну для этой проблемы.Предположим, что первая очередь содержит сообщения со всеми видами категорий (кстати, невозможно создать очередь для каждой категории, так как их может быть много).Эта «нормальная» очередь обычно настраивается (например, без истечения срока действия, но с DLQ).
Теперь, если слушатель потребляет такое сообщение и видит, что он не может обрабатывать сообщения, принадлежащие определенной категории, он помещает его во вторую очередь.Эта очередь настроена с задержкой повторной доставки и временем истечения.Если сейчас установить достаточно большое время истечения (конечно, не из-за переполнения очереди), а время повторной доставки не слишком короткое, то это должно сработать, если нет решения для вышеуказанного вопроса.
Конечнонеобходимо рассчитать, сколько из этих записей в очереди может быть создано в течение времени, когда категория не может быть обработана.А также сколько времени может занять такая недоступность для категории, чтобы можно было соответственно скорректировать повторную доставку.