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 в секунду), поэтому никогда не бывает окна для удаления очереди.

Другие вопросы по тегам