2016-09-02 4 views
0

Мне нужно установить истечение сообщения для моего сообщения в теме JMS. Я попытался установить свойства методов message.setJMSExpiration() и manufacturer.getTimeToLive(). Но я не думаю, что сообщения, которые я опубликовал, остались в теме, которые я опубликовал.JMS сообщение expiry не работает

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

Я использовал селектор для идентификации конкретного клиента.

Если какого-либо из вышеуказанных свойств недостаточно для истечения срока действия сообщения, то нужна ли мне какая-либо другая конфигурация для истечения срока действия сообщения на стороне производителя?

Am использованием Apache ActiveMQ 5.8.0 с JDK 1.6

ответ

0

Мои два цента информации. Надеюсь, это поможет вам определить проблему, которая у вас есть.

Существует два типа подписки: подписка на долговременные и недолговечные подписки (или приложения, которые создают подписки) называются долгосрочными и недолговечными подписчиками соответственно.

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

Если подписки на тему нет, поставщик сообщений просто отменит публикацию.

Срок действия сообщения (a.k.a TimeToLive) применим к обоим типам подписки. Если приложение-подписчик не получает сообщения до истечения срока действия, такие сообщения истекают и не будут доставлены получающему приложению.

Сообщения могут истекать только после публикации производителем поставщика сообщений.

+0

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

+0

Вы говорите две вещи: (1) Клиент не должен пропустить ни одного сообщения и (2) Сообщение должно истечь через некоторое время - Оба противоречат друг другу. Если вы устанавливаете истечение срока действия, и клиент не возобновляется в течение срока действия, клиент будет пропускать эту публикацию. В любом случае, в конце издателя вам необходимо установить время истечения срока действия сообщения перед его публикацией. Поставщик сообщений отменит это сообщение после истечения срока действия. – Shashi

+0

В свою очередь, клиент не должен пропускать сообщения до тех пор, пока сообщение не истечет. Из-за некоторых проблем с безопасностью. В течение срока действия, если клиент начал подписку, нет проблем с получением сообщения. Поэтому я стараюсь установить время истечения срока действия издателя. –

0

1) По спецификации JMS, все настройки QoS (инерционность, срок (так называемый TTL) и приоритет должны быть установлены на объекте производителя. При установке на объекте Message, они игнорируются.

2) Будет ли необходимо убедиться, что код клиента для проверки значения TTL установлен правильно.

3) Значение TTL - это время в миллисекундах, чтобы истечь сообщение (т. Е. 300000 в течение 5 минут), а не время от EPOCH.

Смежные вопросы