我希望能够从同一JVM中的嵌入式ActiveMQ(5.4.2)代理获取从java中搜索主题的消费者数量。 JMX真的是唯一的选择吗? JMX似乎是一个糟糕的选择,因为它可能被选中禁用。这篇文章展示了如何使用JMX获取连接列表:ActiveMQ: Get list of connections through JMX?
我更喜欢非基于JMX的解决方案,因为它可能被禁用。我猜JMX如果在禁用时仍然可以从java中使用它就没问题。我只是熟悉启用/禁用它以与jconsole一起使用。
我错过了API中的内容吗?
答案 0 :(得分:7)
我认为统计插件中的消费者数量应该能够满足您的需求。而且我很确定可以在嵌入式代理中启用统计插件。
答案 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;feedType=atom_1.0</atom>
<rss>queueBrowse/sauer_test2?view=rss&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;feedType=atom_1.0</atom>
<rss>queueBrowse/sauer_test1?view=rss&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