ActiveMQ - 以编程方式删除队列

Posted

技术标签:

【中文标题】ActiveMQ - 以编程方式删除队列【英文标题】:ActiveMQ - Removing queues programmatically 【发布时间】:2011-03-03 11:46:01 【问题描述】:

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

我还通过会话以编程方式创建所有队列。是否有与该程序等效的程序,仅用于删除队列?查询和迭代现有队列也很有用,但我还没有找到方法。

【问题讨论】:

您是在运行 ActiveMQ 嵌入式还是独立的? 【参考方案1】:

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

【讨论】:

谢谢,不,我稍后会看看 BrokerViewMBean 接口,看看我能用它做什么。我会告诉你它是否有效。【参考方案2】:

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

http://gist.github.com/439668

希望对您有所帮助。

布鲁斯

【讨论】:

【参考方案3】:

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

或者,如果您正在运行 ActiveMQ 嵌入式,您可以使用 API 删除目标:Region.removeDestination

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

以上是关于ActiveMQ - 以编程方式删除队列的主要内容,如果未能解决你的问题,请参考以下文章

用于 activeMQ 的 Swift 客户端

ActiveMQ - 通过命令行删除/清除所有队列

Python。如何从队列/主题 ActiveMQ 中删除任何消息

消息队列之ActiveMQ安装配置

使用代理网络中的临时队列的请求/回复模式的 ActiveMQ/Camel 故障转移 - 无法发布到已删除的临时队列

消息队列中间件使用 ActiveMQ