我需要一种方法来在没有using JMX或Iterate all queue using JMS的ActiveMQ中获取队列大小。有没有使用ActiveMQ API获取队列大小的解决方案。
答案 0 :(得分:6)
JMS中没有API用于查询代理的统计信息,这违背了将客户端与中间代理分离的概念。 ActiveMQ确实提供了一些你可以使用的东西,JMX是获得你所追求的最强大的方法,但如果你不想直接使用JMX API,你可以使用基于REST的方法来利用{ {3}}项目ActiveMQ嵌入以支持访问代理使用Jolokia公开的JMX Mbeans的项目。
除了REST选项之外,唯一的另一种方法是允许REST calls允许您向代理发送目标消息,以使用标准JMS代码检索运行时统计信息。
答案 1 :(得分:1)
将Statics Broker Plugin添加到activemq.xml。 以下是获取ActiveMQ统计信息的代码片段。
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");
}
它将从目标主题
获取统计信息