Как удалить сообщения из темы JMS в зависимости от возраста сообщений

У нас есть приложение, которое публикует уведомления о событиях в теме JMS. Замеченная здесь проблема заключается в том, что по прошествии значительного времени хранилище сообщений в Weblogic достигает размера более 10 ГБ. Есть ли способ реализовать компонент, который может удалять сообщения из темы JMS, которые достигли определенного возраста (скажем, 30 дней)?

В настоящее время существует процесс, во время простоя хранилище сообщений удаляется. Тем не менее, для этого процесса требуется предварительная проверка от владельцев приложений-подписчиков, были ли обработаны действия, основанные на последнем сообщении, или нет.

Спасибо


person WrijuB    schedule 29.07.2019    source источник


Ответы (2)


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

Если вы не хотите хранить сообщения старше 30 дней, вы можете попробовать использовать функцию «Время жизни сообщения», определенную спецификацией JMS. В разделе 4.8 спецификации JMS 1.1 говорится:

Клиент может указать значение времени жизни в миллисекундах для каждого отправляемого сообщения. Это значение определяет время истечения срока действия сообщения, которое является суммой времени жизни сообщения и времени его отправки по Гринвичу (для транзакционных отправок это время отправки сообщения клиентом, а не время фиксации транзакции).

Провайдер JMS должен делать все возможное, чтобы срок действия сообщений истекал точно; однако JMS не определяет предоставляемую точность. Недопустимо просто игнорировать время жизни.

Для получения дополнительной информации об истечении срока действия сообщения см. Раздел 3.4.9 «JMSExpiration».

Время жизни сообщения можно установить, когда сообщение отправлено с помощью _ 1_ или один из перегруженных send() методов. Это, конечно, потребует изменения кода отправляющего приложения.

Многие брокеры поддерживают установку времени жизни или истечения срока действия сообщения на брокере, поэтому модификации клиента не являются строго необходимыми. Я недостаточно знаком с Weblogic, чтобы знать, поддерживает ли он эту функцию или нет, но стоит изучить вопрос, хотите ли вы использовать это решение и не хотите изменять своих клиентов.

person Justin Bertram    schedule 29.07.2019

Обнаружен следующий код, который может помочь в очистке сообщений путем просмотра очереди.

браузер очереди

person Chandra4You    schedule 03.05.2021