ActiveMQ - 以编程方式删除队列

时间:2010-06-14 11:47:38

标签: persistence queue activemq

StackOverflowers,有没有办法以编程方式删除ActiveMQ中的队列或主题?我正在使用ActiveMQ的标准持久性,我的应用程序要求在启动时动态重新创建所有新队列(除非队列中存储了消息,在这种情况下,队列应保持存在)。

我也通过会话以编程方式创建所有队列。是否有相同的程序,只删除队列?查询和迭代现有队列也很有用,但我还没有办法做到这一点。

4 个答案:

答案 0 :(得分:6)

您还可以Delete Destinations在一段时间内处于非活动状态。自Active MQ 5.4起可用

或者,如果您运行的是ActiveMQ,则可以使用API​​删除目的地:Region.removeDestination

答案 1 :(得分:4)

要以编程方式从ActiveMQ中删除目标,您需要使用代理MBean(removeTopic)上的removeQueueorg.apache.activemq:BrokerName=localhost,Type=Broker方法通过JMX执行此操作。我已经发布了一些示例代码来演示这一点,包括在Gist上使用removeTopic方法:

http://gist.github.com/439668

希望有所帮助。

布鲁斯

答案 2 :(得分:2)

如果你使用spring JmsTemplate,你可以这样做:

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

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

答案 3 :(得分:0)

虽然没有很多具体的例子,但这里有一些关于它的文档: http://activemq.apache.org/how-do-i-purge-a-queue.html