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