使用JMS客户端枚举和删除activemq队列



我希望以编程方式清除所有队列,无论是作为管理功能还是在开发/测试期间获得一个干净的系统。

以下是内联示例,我编写了如下代码:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
DestinationSource destinationSource = connection.getDestinationSource();
for (ActiveMQQueue queue : destinationSource.getQueues()) {
connection.destroyDestination(queue);
}

然而,getQueues()总是返回一个空集合,即使在web控制台中有可见的队列。查看源代码,似乎队列列表仅通过侦听队列创建咨询主题消息来填充,因此在运行此代码时存在的任何队列都不会列出。

这似乎与ActiveMQ文档相矛盾,它说"从5.1.0开始,您可以在ActiveMQConnection上使用新的DestinationSource来访问可用的队列">

我做错了什么吗?是否有更好的接口来枚举和清除队列?

我正在使用ActiveMQ 5.15.12

这也是我提交的一个bug报告的主题

管理队列的最佳方法是通过代理本身的JMX mbean,它公开了用于枚举队列以及用于清除、删除等管理器想要的api。

另一个选择是使用Jalokia Rest API,它是JMX MBeans之上的一个很好的层

有一些通过JMX管理ActiveMQ的好文档,只需快速谷歌搜索。

最新更新