【问题标题】:ActiveMQ get number of consumers listening to a topic from javaActiveMQ 获取从 java 中收听主题的消费者数量
【发布时间】:2012-05-04 17:00:13
【问题描述】:

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

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

我是否遗漏了 API 中的某些内容?

【问题讨论】:

    标签: java activemq jmx


    【解决方案1】:

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

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

    【讨论】:

    • 我喜欢这个 (+1) 但我会选择 boday 进行检查,因为这对于我所追求的而言似乎是一种更简单的技术,即不需要插件。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我只是通过触发这个 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。

      【讨论】:

        【解决方案4】:

        在嵌入式 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
        

        【讨论】:

          猜你喜欢
          • 2017-02-14
          • 2014-05-21
          • 2017-09-05
          • 2021-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-27
          • 1970-01-01
          相关资源
          最近更新 更多