【问题标题】:activeMQ count matching messageactiveMQ 计数匹配消息
【发布时间】:2014-08-05 19:30:24
【问题描述】:

大家好,

我正在寻找一种方法来计算 ActiveMQ 中匹配消息的数量。这是添加消息的代码:

ObjectMessage myBeanMessage = session.createObjectMessage();
myBeanMessage.setObject(myBean);
myBeanMessage.setStringProperty("myProperty", myBean.getProperty());
producer.send(myBeanMessage);

现在我想统计 myQueue 中 myProperty = "a property String" 的消息数,例如,但没有找到任何 QueueMBean api: http://activemq.apache.org/maven/5.7.0/activemq-core/apidocs/org/apache/activemq/broker/jmx/QueueViewMBean.html

唯一可能满足我要求的api是

int copyMatchingMessagesTo(String selector, String destinationName) 抛出异常

复制匹配给定选择器的消息

返回:复制的消息数

抛出:异常

这意味着我必须将所有匹配的消息复制到另一个队列并计算复制的消息数。 但是,我觉得复制所有匹配的消息只是为了找出复制了多少条消息,这在某种程度上是“不必要的资源浪费”。

那么,有什么方法可以直接统计匹配到的消息数吗?

谢谢

【问题讨论】:

    标签: activemq


    【解决方案1】:

    好吧,您始终可以使用该选择器浏览队列,并计算浏览的消息。这意味着您将向客户端读取消息,但不会真正将它们复制到另一个队列。如果这在您的场景中对性能/资源更友好或更糟,我无法确定。

    【讨论】:

      【解决方案2】:

      这个用例似乎进入了 ActiveMQ(或一般的 JMS)anti-patterns 的领域。

      您需要记住,队列不是数据库,并且这样对待它很可能会以眼泪收场。在 JMS 中,您可以选择使用带有选择器的队列浏览器来浏览队列内容。但是,您必须谨慎行事,因为规范仅说明浏览器将为您提供队列的快照,但不能保证您将浏览所有消息。在 ActiveMQ 中,当您浏览队列时,您只能浏览适合内存的内容,然后浏览停止,因此您的计数可能与真正深的队列相去甚远。

      【讨论】:

        猜你喜欢
        • 2014-08-10
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 2012-04-28
        • 2013-01-24
        • 2012-10-23
        相关资源
        最近更新 更多