2010-06-14 7 views
6

Fellow StackOverflowers, existe-t-il un moyen de supprimer une file d'attente ou un sujet dans ActiveMQ par programme? J'utilise la persistance standard d'ActiveMQ et mon application nécessite qu'au démarrage, toutes les nouvelles files d'attente soient recréées de manière dynamique (à moins que des messages ne soient stockés dans la file d'attente, auquel cas la file d'attente devrait rester).ActiveMQ - Suppression de files d'attente par programme

Je crée également toutes les files d'attente par programme via des sessions. Y at-il un équivalent à cette procédure, seulement pour supprimer une file d'attente? Querying et itération à travers les files d'attente existantes serait également utile, mais je n'ai pas encore trouvé un moyen de le faire.

+0

Etiez vous exécutez ActiveMQ intégré ou autonome? – Andrejs

Répondre

0

Bien qu'il n'y ait pas beaucoup d'exemples concrets, il y a une documentation à ce sujet ici: http://activemq.apache.org/how-do-i-purge-a-queue.html

+0

Merci nos, je vais jeter un oeil à l'interface BrokerViewMBean plus tard et voir ce que je peux faire avec. Je vous ferai savoir si cela fonctionne. –

4

Pour supprimer une destination de ActiveMQ programme, vous devrez le faire via JMX en utilisant les méthodes removeTopic et removeQueue sur la broker MBean (org.apache.activemq:BrokerName=localhost,Type=Broker). J'ai posté quelques exemples de code pour démontrer, y compris l'utilisation de la méthode removeTopic, sur le Gist:

http://gist.github.com/439668

espoir qui aide.

Bruce

6

Vous pouvez également Delete Destinations qui sont inactives pendant une certaine période de temps. Disponible depuis actif MQ 5.4

Alternativement, si vous utilisez ActiveMQ embedded vous pouvez utiliser l'API pour supprimer des destinations: Region.removeDestination

2

Si vous utilisez le printemps JmsTemplate, vous pouvez le faire de cette façon:

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

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