【发布时间】:2016-11-27 20:33:42
【问题描述】:
我需要一种在没有using JMX 或Iterate all queue using JMS 的情况下在 ActiveMQ 中获取队列大小的方法。有没有使用 ActiveMQ API 获取队列大小的解决方案。
【问题讨论】:
我需要一种在没有using JMX 或Iterate all queue using JMS 的情况下在 ActiveMQ 中获取队列大小的方法。有没有使用 ActiveMQ API 获取队列大小的解决方案。
【问题讨论】:
JMS 中没有用于查询代理以获取统计信息的 API,这违背了将客户端彼此以及中间代理分离的概念。 ActiveMQ 确实提供了一些您可以使用的东西,JMX 是获得您所追求的最强大的方法,但如果您不想直接使用 JMX API,您可以使用基于 REST 的方法,该方法利用 @ ActiveMQ 嵌入的 987654321@ 项目以支持访问代理使用REST calls 公开的JMX Mbeans。
除了 REST 选项之外,唯一的其他方法是启用 Statistics Broker Plugin 以允许您将目标消息发送到代理,以使用标准 JMS 代码检索运行时统计信息。
【讨论】:
将 Statistics Broker Plugin 添加到您的 activemq.xml 中。 以下是获取 ActiveMQ Stats 的代码片段。
public Long checkMessageCountOnAllBroker() throws JMSException {
MapMessage mapMessage = (MapMessage) jmsTemplate.sendAndReceive("ActiveMQ.Statistics.Broker", Session::createMessage);
return mapMessage.getLong("size");
}
这将从 ActiveMq 中获取所有队列的大小。用于获取特定主题的静态数据。
public Long checkMessageCountOnDestination() throws JMSException {
MapMessage mapMessage = jmsTemplate.sendAndReceive("ActiveMQ.Statistics.Destination.some-topic", Session::createMessage);
return mapMessage.getLong("size");
}
它将从目标主题中获取统计信息
【讨论】: