大家好,
我正在寻找一种方法来计算ActiveMQ中的一些匹配消息。以下是添加消息的代码:
ObjectMessage myBeanMessage = session.createObjectMessage();
myBeanMessage.setObject(myBean);
myBeanMessage.setStringProperty("myProperty", myBean.getProperty());
producer.send(myBeanMessage);
现在我想计算myQueue中myProperty ="属性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)抛出异常
复制与给定选择器匹配的消息
返回:复制的邮件数
抛出:例外
这意味着我必须将所有匹配的消息复制到另一个队列并计算复制的消息数。 但是,我觉得复制所有匹配的消息只是为了找到复制了多少消息,以某种方式"不必要的浪费资源"。
那么,有没有什么方法可以直接计算匹配消息的数量?
由于
答案 0 :(得分:0)
好吧,您始终可以使用该选择器浏览队列,并计算浏览的消息。这意味着您将向客户端读取消息,但不会将它们真正复制到另一个队列。如果在您的场景中更具性能/资源友好性或更糟糕,我无法分辨。
答案 1 :(得分:0)
用例似乎涉及ActiveMQ(或一般JMS)anti-patterns的领域。
你需要记住,一个队列不是一个数据库,并且这样处理它,很可能会以泪流满面。在JMS中,您可以选择使用带选择器的队列浏览器来浏览队列内容。你必须谨慎行事,因为规范只规定浏览器会给你一个队列的快照,但不保证你会浏览所有的消息。在ActiveMQ中,当您浏览队列时,您只能浏览适合内存的内容,然后浏览停止,这样您的计数就可以用于非常深的队列。