ActiveMQ - удалить VirtualTopic, когда Consumers = ноль
Я пытаюсь реализовать новое приложение, используя 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 (а число потребителей будет помечено как ноль), но этого не происходит. Я что-то пропустил?
Спасибо!
1 ответ
Я нашел ответ сам с немного большим знакомством с ActiveMQ. Очередь автоматически удаляется, но только если нет ожидающих сообщений. Приложение, в котором это решение было реализовано для сделок с постоянным потоком сообщений (где-то между 20 - 5000 в секунду), поэтому никогда не бывает окна для удаления очереди.