【问题标题】:Active MQ QueueBrowser returning very high number of messages than actual活动 MQ QueueBrowser 返回的消息数量比实际数量多
【发布时间】:2013-12-18 20:25:39
【问题描述】:

嗨,我是 ActiveMQ 的新手,

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

下面是sn-p的代码:

    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 有什么问题??

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

【问题讨论】:

    标签: activemq


    【解决方案1】:

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

    【讨论】:

    • :如果是内存限制问题,返回的消息数应该比实际少吧??我相信,问题可能出在 getEnumeration() 方法中,该方法在调用 TestQBrowser.getEnumeration() 时返回当前队列消息而不是消息。例如,当 getEnumeration() 被调用时,队列中有 5 条消息当我们计数 ++ 时,假设添加了其他 10 条消息,现在 enum1.nextElement() 循环到 15(5+10) 而不是 5??
    • 正如我所说,v5.8.0 中有一个与 QueueBrowsers 相关的错误。升级到 5.9.0 并重试。阅读,是根本。
    【解决方案2】:

    查看How can I monitor ActiveMQ,有很多可能性。

    Advisory Messages 可能最适合您的要求。

    【讨论】:

    • 谢谢你。但是需要像上面这样非常基本的监控,你有机会看看上面提到的 QueueBrowser 计数问题吗?
    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多