ActiveMQ - Removing queues programmatically

早过忘川 提交于 2020-01-01 10:05:48

问题


Fellow StackOverflowers, is there a way for me to remove a queue or a topic in ActiveMQ programmatically? I am using ActiveMQ's standard persistency, and my application requires that, on startup, all new queues be dynamically re-created (unless there are messages stored in the queue, in which case, the queue should remain to exist).

I am also creating all queues programmatically through sessions. Is there an equivalent to that procedure, only to delete a queue? Querying and iterating through the existing queues would also be useful, but i haven't found a way to do that yet.


回答1:


You can also Delete Destinations that are inactive for some period of time. Available since Active MQ 5.4

Alternatively if you are running ActiveMQ embedded you can use the API to remove destinations: Region.removeDestination




回答2:


To remove a destination from ActiveMQ programmatically, you will need to do so via JMX using the removeTopic and removeQueue methods on the broker MBean (org.apache.activemq:BrokerName=localhost,Type=Broker). I have posted some example code to demonstrate this, including the use of the removeTopic method, over on Gist:

http://gist.github.com/439668

Hope that helps.

Bruce




回答3:


If you use spring JmsTemplate, you can do it this way:

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

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



回答4:


While there's not a lot of concrete examples, there's some documentation about it here : http://activemq.apache.org/how-do-i-purge-a-queue.html



来源:https://stackoverflow.com/questions/3036932/activemq-removing-queues-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!