使用 JMS 客户端枚举和删除 activemq 队列
enumerating and deleting activemq queues using JMS client
我希望以编程方式清除所有队列,作为管理功能或在 dev/test 期间获得一个干净的系统。
根据内联示例,我编写了如下代码:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
DestinationSource destinationSource = connection.getDestinationSource();
for (ActiveMQQueue queue : destinationSource.getQueues()) {
connection.destroyDestination(queue);
}
但是,getQueues() 总是 returns 一个空集,即使在 Web 控制台中有可见的队列。查看源代码,队列列表似乎仅通过侦听队列创建咨询主题消息来填充,因此未列出此代码 运行 时存在的任何队列。
这似乎与 the ActiveMQ docs 相矛盾,它说“从 5.1.0 开始,您可以在 ActiveMQConnection 上使用新的 DestinationSource 来访问可用队列”
我是不是做错了什么?是否有更好的接口来枚举和清除队列?
我正在使用 ActiveMQ 5.15.12
的主题
manage Queues would be via the JMX Mbeans from the broker itself that expose APIs for enumerating the Queues and for purging 的最佳方式,删除经理想要的等。
另一种选择是使用 Jalokia Rest API,这是 JMX MBean 之上的一个很好的层
有一些关于通过 JMX 管理 ActiveMQ 的好文档,只需快速 Google 搜索一下即可。
我希望以编程方式清除所有队列,作为管理功能或在 dev/test 期间获得一个干净的系统。
根据内联示例,我编写了如下代码:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
DestinationSource destinationSource = connection.getDestinationSource();
for (ActiveMQQueue queue : destinationSource.getQueues()) {
connection.destroyDestination(queue);
}
但是,getQueues() 总是 returns 一个空集,即使在 Web 控制台中有可见的队列。查看源代码,队列列表似乎仅通过侦听队列创建咨询主题消息来填充,因此未列出此代码 运行 时存在的任何队列。
这似乎与 the ActiveMQ docs 相矛盾,它说“从 5.1.0 开始,您可以在 ActiveMQConnection 上使用新的 DestinationSource 来访问可用队列”
我是不是做错了什么?是否有更好的接口来枚举和清除队列?
我正在使用 ActiveMQ 5.15.12
的主题manage Queues would be via the JMX Mbeans from the broker itself that expose APIs for enumerating the Queues and for purging 的最佳方式,删除经理想要的等。
另一种选择是使用 Jalokia Rest API,这是 JMX MBean 之上的一个很好的层
有一些关于通过 JMX 管理 ActiveMQ 的好文档,只需快速 Google 搜索一下即可。