ActiveMQ在不使用JMX的情况下获取队列大小,JMS

时间:2016-07-24 12:09:31

标签: java activemq

我需要一种方法来在没有using JMXIterate all queue using JMS的ActiveMQ中获取队列大小。有没有使用ActiveMQ API获取队列大小的解决方案。

2 个答案:

答案 0 :(得分:6)

JMS中没有API用于查询代理的统计信息,这违背了将客户端与中间代理分离的概念。 ActiveMQ确实提供了一些你可以使用的东西,JMX是获得你所追求的最强大的方法,但如果你不想直接使用JMX API,你可以使用基于REST的方法来利用{ {3}}项目ActiveMQ嵌入以支持访问代理使用Jolokia公开的JMX Mbeans的项目。

除了REST选项之外,唯一的另一种方法是允许REST calls允许您向代理发送目标消息,以使用标准JMS代码检索运行时统计信息。

答案 1 :(得分:1)

Statics Broker Plugin添加到a​​ctivemq.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");
}

它将从目标主题

获取统计信息