java - 计算 JMS 队列上的消息时的奇怪行为

标签 java jms activemq message-queue

我正在使用 Active MQ 和 Java JMS。

我想统计队列中消息的数量。

一种方法是使用浏览器计算消息数:

    Queue queue = (Queue) session.createQueue(subject);
    QueueBrowser queueBrowser = session.createBrowser(queue);
    Enumeration<?> e = queueBrowser.getEnumeration();
    int numMsgs = 0;
    // count number of messages
    while (e.hasMoreElements()) {
    //    Message m = (Message) e.nextElement();
        e.nextElement();
        numMsgs++;
    }

但对于具有 5000 个待处理请求的队列,这只会返回 500。

另一种方法是(迭代队列中的所有消息):

Message message= consumer.receive(500);
while(message!= null)
    {

        if (message instanceof TextMessage) 
        {
            TextMessage textMessage = (TextMessage) message;
       //     BytesMessage Byte

            System.out.println("Received message '"+ textMessage.getText() + "'");
        }
        if(message!=null)
            Messages_list.add(message);

        message = consumer.receive(1);
    } 

但这也没有给出正确数量的待处理消息。

我如何自信地迭代 akk 队列中等待的消息?

最佳答案

ActiveMQ 中有一个错误阻止浏览器返回实际的消息数。在这种情况下,浏览器仅返回单页消息,由 maxPageSize 属性设置并记录在此处:http://activemq.apache.org/per-destination-policies.html

ActiveMQ 目前有一个关于这个问题的错误报告,它正在这里被跟踪:https://issues.apache.org/jira/browse/AMQ-4181 .此问题已解决,目前计划在 ActiveMQ 5.8.0 中修复。

关于java - 计算 JMS 队列上的消息时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13679369/

相关文章:

Javac 找不到位于同一目录中的类

java - ActiveMQ分布式事务+扩展

jms - HornetQ vs ActiveMQ vs Qpid 的优势

java - JMS 主题生存时间

java - 创建一个使用 mysql 数据库的 java 应用程序后,用户的计算机需要什么才能正常运行?

java - 目标: package in maven .是什么意思

java - 从 Jetty HTTPServletRequest 获取 MAC 地址

java - JMS:无法通过选择器从主题中选择 jms 消息

java - WebSphere MQ v7.1 安全用户凭证

java - 我不知道 JMSExceptions 是什么以及如何处理它们。有人可以向我解释一下吗?