【问题标题】:enumerating and deleting activemq queues using JMS client使用 JMS 客户端枚举和删除 activemq 队列
【发布时间】:2021-11-01 23:20:41
【问题描述】:

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

按照内联示例,我编写了如下代码:

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
DestinationSource destinationSource = connection.getDestinationSource();
for (ActiveMQQueue queue : destinationSource.getQueues()) {
    connection.destroyDestination(queue);
}

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

这似乎与 the ActiveMQ docs 相矛盾,它说“从 5.1.0 开始,您可以在 ActiveMQConnection 上使用新的 DestinationSource 来访问可用队列”

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

我正在使用 ActiveMQ 5.15.12

这也是a bug report I submitted的话题

【问题讨论】:

    标签: jms activemq


    【解决方案1】:

    manage 队列的最佳方式是通过代理本身的JMX Mbeans,它公开用于枚举队列和purging 的 API,删除经理想要的等。

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

    有一些很好的文档可以通过 JMX 管理 ActiveMQ,只需在 Google 上快速搜索一下即可。

    【讨论】:

    • 谢谢。我以前看过 Manning 页面,但被付费墙吓倒了。似乎 JMX 是一个不错的选择。你能添加一个链接到“通过 JMS 管理 ActiveMQ 的好文档”吗?我什么也没找到(除非 JMS 指的是 JMX API)。我确实找到了类似“JMS API 不支持队列列表”的 cmets
    • 将 JMS 固定为 JMX,肌肉记忆总是让我输入 JMS。 DestinationSource 位对于代理的实际管理来说不够健壮
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 2013-06-21
    • 2017-07-17
    • 2021-03-08
    • 2012-10-05
    • 2012-06-13
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多