Activemq 活动MQ QueueBrowser返回的消息数比实际值高

Activemq 活动MQ QueueBrowser返回的消息数比实际值高,activemq,Activemq,嗨,我是ActiveMQ的新手 我们正在使用活动MQ-5.8.0作为系统的消息代理。我的要求是,如果特定队列中的消息数量超过某个指定数量(可配置),则获取警报邮件。所以我发现我们可以使用QueueBrowser来获取消息列表 下面是代码片段: enum1 = TestQBrowser.getEnumeration(); int count = 0; while(enum1.hasMoreElements()){ count++;

嗨,我是ActiveMQ的新手

我们正在使用活动MQ-5.8.0作为系统的消息代理。我的要求是,如果特定队列中的消息数量超过某个指定数量(可配置),则获取警报邮件。所以我发现我们可以使用QueueBrowser来获取消息列表

下面是代码片段:

    enum1 = TestQBrowser.getEnumeration();
        int count = 0;
        while(enum1.hasMoreElements()){
            count++;
            enum1.nextElement();
        }

                    if(count>5)
                 sendMail("Queue has more pending message than threashold 5");//logic to send alert mail.
这和之前预期的一样工作,但我在队列中发现了一个奇怪的数字(1113762条消息),但是当我用ActiveMQ管理控制台检查相同时,只有100条消息。 你能告诉我为什么我收到这么多的信息吗。我的方式有问题吗?或者QueueBrowser有问题吗

这是我在StackOverflow中的第一个问题,这个问题可能是最基本的,但我在这个问题上花了很多时间。

看看,有很多可能性


可能最适合您的需求。

ActiveMQ 5.8中有一个错误导致了这种情况。如果要可靠地使用QueueBrowser来尝试执行此操作,则需要移动到5.9.0版。但是,如果队列太深,您仍然可能会遇到问题,因为无法保证浏览器将返回所有消息,因为它必须在配置的内存限制内工作,这可能会导致它停止从存储中分页消息

谢谢。但是需要上面提到的非常基本的监控,你有机会看看上面提到的QueueBrowser计数问题吗?:如果是内存限制问题,它返回的消息数应该比实际正确的消息数少??。我认为,问题可能出在getEnumeration()方法中,该方法返回当前队列消息,而不是调用TestQBrowser.getEnumeration()时返回的消息。例如,假设在我们计数++时调用getEnumeration()时,队列中有5条消息,假设添加了其他10条消息,现在是enum1.nextElement()循环次数是15(5+10),而不是5??正如我所说,v5.8.0中有一个与QueueBrowser相关的bug。升级到5.9.0并重试。阅读是基础。