ActiveMQ get number of consumers listening to a topic from java
Asked Answered
B

4

10

I would like to be able to get the number of consumers listening to a topic from java for an embedded ActiveMQ (5.4.2) broker in the same JVM. Is JMX really the only option here? JMX seems like a bad option since it may be optionally disabled. This post shows how to use JMX to get a list of connections: ActiveMQ: Get list of connections through JMX?

I would prefer a non-JMX based solution though due to it perhaps being disabled. I guess JMX would be ok if it was still usable from java when disabled. I am just familiar with enabling/disabling it for use with jconsole.

Am I missing something in the API?

Bodyguard answered 24/4, 2012 at 3:42 Comment(0)
F
6

you can use Advisory Messages to get the number of consumers of queues/topics (amongst other things) without using JMX (see ActiveMQ.Advisory.Consumer.Topic, etc)...

Force answered 24/4, 2012 at 15:18 Comment(0)
C
8

I think that the consumer count in the statistics plugin should give you what you want. And I'm fairly sure that the statistics plugin can be enabled in an embedded broker.

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

Condescendence answered 24/4, 2012 at 4:9 Comment(1)
I like this (+1) but am going to go with boday for the check since that appears to be a simpler technique for what I am after, i.e. does not require a plugin.Bodyguard
F
6

you can use Advisory Messages to get the number of consumers of queues/topics (amongst other things) without using JMX (see ActiveMQ.Advisory.Consumer.Topic, etc)...

Force answered 24/4, 2012 at 15:18 Comment(0)
C
1

I do it simply by fireing this GET: http://localhost:8161/admin/xml/queues.jsp

It returns a list of all queues with registered consumers in 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>

You can see the "consumerCount" attribute and react, accordingly. There is also a get method for getting all consumer-details of a given queue: http://localhost:8161/admin/queueConsumers.jsp?JMSDestination=sauer_test1.

Curlew answered 23/12, 2020 at 22:11 Comment(0)
U
0

In case of embedded ActiveMQ you may use BrokerService, to get consumers count on topic. Code is in Scala, but there shouldn't be much difference in 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
Up answered 6/6, 2019 at 14:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.