Я пытаюсь реализовать новое приложение с использованием JMS под activeMQ 5.8.0. Есть несколько приложений, настроенных как Производители (то есть для дампа сообщений в MQ), две темы, а затем потребители настроены на просмотр своей VirtualTopic, которая динамически создается при запуске сервера Tomcat.
Пример потока будет:
Producer1 (Tomcat) --JMS--> ActiveMQ.VirtualTopic
Consumer.VirtualTopic1 --JMS--> Consumer1 (Tomcat)
Consumer.VirtualTopic2 --JMS--> Consumer2 (Tomcat)
Нам нужна была гибкость, позволяющая запускать любое количество потребителей и динамически отправлять им ActiveMQ. Это работает. Однако, когда потребительский сервер выключен (либо в результате того, что он больше не нужен, сбой сервера, сбой сети и т. Д.), Я хочу, чтобы AMQ перестал помещать сообщения в его VirtualTopic, поскольку управление потоком запускается и больше не получение сообщений от производителя.
У меня есть мой activemq.xml, настроенный с помощью:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulePeriodForDestinationPurge="10000">
<policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000" />
Поэтому я ожидаю, что сервер будет помечен как неактивный в течение 40 секунд после остановки узла Tomcat (и количества потребителей, помеченных как ноль), но этого не происходит. Я что-то упустил?
Спасибо!
Я сам нашел ответ, немного более знакомый с ActiveMQ. Очередь удаляется автоматически, но только если нет ожидающих сообщений. Это решение было реализовано для работы с постоянным потоком сообщений (где-то между 20-5000 в секунду), поэтому никогда не бывает окна для удаления очереди.