10

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

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

我在 API 中遗漏了什么吗?

4

4 回答 4

8

我认为统计插件中的消费者计数应该给你你想要的。而且我相当确定可以在嵌入式代理中启用统计插件。

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

于 2012-04-24T04:09:00.950 回答
6

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

于 2012-04-24T15:18:32.417 回答
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。

于 2020-12-23T22:11:26.727 回答
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
于 2019-06-06T14:48:41.683 回答