ActiveMQ获取从java中收听主题的消费者数量

时间:2012-04-24 03:42:50

标签: java activemq jmx

我希望能够从同一JVM中的嵌入式ActiveMQ(5.4.2)代理获取从java中搜索主题的消费者数量。 JMX真的是唯一的选择吗? JMX似乎是一个糟糕的选择,因为它可能被选中禁用。这篇文章展示了如何使用JMX获取连接列表:ActiveMQ: Get list of connections through JMX?

我更喜欢非基于JMX的解决方案,因为它可能被禁用。我猜JMX如果在禁用时仍然可以从java中使用它就没问题。我只是熟悉启用/禁用它以与jconsole一起使用。

我错过了API中的内容吗?

4 个答案:

答案 0 :(得分:7)

我认为统计插件中的消费者数量应该能够满足您的需求。而且我很确定可以在嵌入式代理中启用统计插件。

http://activemq.apache.org/statisticsplugin.html

答案 1 :(得分:5)

您可以使用Advisory Messages来获取队列/主题(以及其他内容)的消费者数量,而无需使用JMX(请参阅ActiveMQ.Advisory.Consumer.Topic等)......

答案 2 :(得分:1)

我只是通过触发这个 GET 来做到这一点: http://localhost:8161/admin/xml/queues.jsp

它以 XML 格式返回具有注册消费者的所有队列的列表:

<?xml version="1.0" encoding="UTF-8"?>
<queues>
    <queue name="sauer_test2">
        <stats size="0" consumerCount="0" enqueueCount="0" dequeueCount="0"/>
        <feed>
            <atom>queueBrowse/sauer_test2?view=rss&amp;amp;feedType=atom_1.0</atom>
            <rss>queueBrowse/sauer_test2?view=rss&amp;amp;feedType=rss_2.0</rss>
        </feed>
    </queue>
    <queue name="sauer_test1">
        <stats size="0" consumerCount="1" enqueueCount="1" dequeueCount="1"/>
        <feed>
            <atom>queueBrowse/sauer_test1?view=rss&amp;amp;feedType=atom_1.0</atom>
            <rss>queueBrowse/sauer_test1?view=rss&amp;amp;feedType=rss_2.0</rss>
        </feed>
    </queue>
</queues>

您可以看到“consumerCount”属性并做出相应的反应。还有一个 get 方法用于获取给定队列的所有消费者详细信息: http://localhost:8161/admin/queueConsumers.jsp?JMSDestination=sauer_test1.

答案 3 :(得分:0)

如果是嵌入式ActiveMQ,则可以使用BrokerService来使消费者依赖主题。 代码在Scala中,但是Java中应该没有太大区别。

            import org.apache.activemq.broker.{BrokerService, TransportConnector}

            val brokerService = new BrokerService()
            brokerService.setBrokerName("localhost")
            brokerService.setUseJmx(false)
            val transportConnector: TransportConnector = brokerServiceSetup.addConnector(s"tcp://localhost:61616")
            brokerService.start()
            brokerService.getDestination(new ActiveMQTopic(topicName))
            topic.getConsumers