ActiveMQ - удаление очередей программно - PullRequest
6 голосов
/ 14 июня 2010

Товарищ StackOverflowers, есть ли способ для меня, чтобы удалить очередь или тему в ActiveMQ программно? Я использую стандартную постоянство ActiveMQ, и мое приложение требует, чтобы при запуске все новые очереди создавались динамически (если в очереди не хранятся сообщения, и в этом случае очередь должна оставаться существующей).

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

Ответы [ 4 ]

6 голосов
/ 23 февраля 2012

Вы также можете Удалить пункты назначения , которые неактивны в течение некоторого периода времени.Доступно с Active MQ 5.4

В качестве альтернативы, если вы используете встроенный ActiveMQ, вы можете использовать API для удаления адресатов: Region.removeDestination

4 голосов
/ 16 июня 2010

Чтобы удалить пункт назначения из ActiveMQ программным способом, вам потребуется сделать это через JMX, используя методы removeTopic и removeQueue в посреднике MBean (org.apache.activemq:BrokerName=localhost,Type=Broker). Я опубликовал пример кода, чтобы продемонстрировать это, включая использование метода removeTopic в Gist:

http://gist.github.com/439668

Надеюсь, это поможет.

Брюс

2 голосов
/ 06 мая 2014

Если вы используете пружинный JmsTemplate, вы можете сделать это следующим образом:

Connection cn = getJmsTemplate().getConnectionFactory().createConnection();
ActiveMQDestination destination = ActiveMQDestination.createDestination(queueName, ActiveMQDestination.QUEUE_TYPE);             

if(cn instanceof PooledConnection){
    ((PooledConnection)cn).getConnection().destroyDestination(destination );
}
0 голосов
/ 14 июня 2010

Хотя конкретных примеров не так много, здесь есть некоторая документация: http://activemq.apache.org/how-do-i-purge-a-queue.html

...