2010-06-14 6 views
6

Fellow StackOverflowers, gibt es eine Möglichkeit für mich, eine Warteschlange oder ein Thema in ActiveMQ programmgesteuert zu entfernen? Ich verwende die Standardpersistenz von ActiveMQ und meine Anwendung erfordert, dass beim Start alle neuen Warteschlangen dynamisch neu erstellt werden (es sei denn, es sind Nachrichten in der Warteschlange gespeichert, in welchem ​​Fall die Warteschlange bestehen bleiben sollte).ActiveMQ - Warteschlangen programmgesteuert entfernen

Ich erstellt auch alle Warteschlangen programmgesteuert durch Sitzungen. Gibt es eine Entsprechung zu dieser Prozedur, nur um eine Warteschlange zu löschen? Das Abfragen und Durchlaufen der vorhandenen Warteschlangen wäre ebenfalls nützlich, aber ich habe noch keinen Weg gefunden, dies zu tun.

+0

Were Sie ActiveMQ Embedded oder Standalone ausführen? – Andrejs

Antwort

0

Zwar gibt es nicht viel konkrete Beispiele, es gibt einige Dokumentation darüber hier: mit den removeTopic und removeQueue Methoden auf dem http://activemq.apache.org/how-do-i-purge-a-queue.html

+0

Dank nein, ich werde später auf die BrokerViewMBean-Schnittstelle schauen und sehen, was ich damit machen kann. Ich werde Sie wissen lassen, ob es funktioniert. –

4

Um programmatisch ein Ziel aus ActiveMQ zu entfernen, müssen Sie dies über JMX tun Makler MBean (org.apache.activemq:BrokerName=localhost,Type=Broker). Ich habe einig Beispiel-Code gepostet zu demonstrieren, einschließlich der Verwendung der removeTopic Methode, über auf Gist:

http://gist.github.com/439668

Hoffnung, das hilft.

Bruce

2

Wenn Sie Feder JmsTemplate verwenden, können Sie es auf diese Weise tun:

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

if(cn instanceof PooledConnection){ 
    ((PooledConnection)cn).getConnection().destroyDestination(destination); 
}