【问题标题】:ActiveMQ get queue size without using JMX, JMSActiveMQ 在不使用 JMX、JMS 的情况下获取队列大小
【发布时间】:2016-11-27 20:33:42
【问题描述】:

我需要一种在没有using JMXIterate all queue using JMS 的情况下在 ActiveMQ 中获取队列大小的方法。有没有使用 ActiveMQ API 获取队列大小的解决方案。

【问题讨论】:

    标签: java activemq


    【解决方案1】:

    JMS 中没有用于查询代理以获取统计信息的 API,这违背了将客户端彼此以及中间代理分离的概念。 ActiveMQ 确实提供了一些您可以使用的东西,JMX 是获得您所追求的最强大的方法,但如果您不想直接使用 JMX API,您可以使用基于 REST 的方法,该方法利用 @ ActiveMQ 嵌入的 987654321@ 项目以支持访问代理使用REST calls 公开的JMX Mbeans

    除了 REST 选项之外,唯一的其他方法是启用 Statistics Broker Plugin 以允许您将目标消息发送到代理,以使用标准 JMS 代码检索运行时统计信息。

    【讨论】:

    • 谢谢,“Statistics Broker Plugin”就是解决方案
    【解决方案2】:

    Statistics Broker Plugin 添加到您的 activemq.xml 中。 以下是获取 ActiveMQ Stats 的代码片段。

    public Long checkMessageCountOnAllBroker() throws JMSException {
        MapMessage mapMessage = (MapMessage) jmsTemplate.sendAndReceive("ActiveMQ.Statistics.Broker", Session::createMessage);
        return mapMessage.getLong("size");
    }
    

    这将从 ActiveMq 中获取所有队列的大小。用于获取特定主题的静态数据。

    public Long checkMessageCountOnDestination() throws JMSException {
        MapMessage mapMessage = jmsTemplate.sendAndReceive("ActiveMQ.Statistics.Destination.some-topic", Session::createMessage);
        return mapMessage.getLong("size");
    }
    

    它将从目标主题中获取统计信息

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多