【问题标题】:QueueBrowser does not return all messagesQueueBrowser 不返回所有消息
【发布时间】:2014-03-17 22:23:02
【问题描述】:

我列出了每个队列中的队列和消息。以下是我的代码。但是,QueueBrowser 无法正确检索消息。

假设我有一个名为 TestQueue 的队列,它有 1000 条消息。

我第一次运行我的程序时,它只显示 200 条消息。 第二 - 400 第三 - 600 第四 - 800 第五 - 1000

你能告诉我如何解决这个问题吗?

ConnectionFactory out = new ActiveMQConnectionFactory("tcp://localhost:61616?jms.prefetchPolicy.all=10000");
ActiveMQConnection connection = (ActiveMQConnection) out.createConnection();

connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Set<ActiveMQQueue> amqs = connection.getDestinationSource().getQueues(); 
Iterator<ActiveMQQueue> queues = amqs.iterator(); 

while ( queues.hasNext() ) 
{ 
    ActiveMQQueue queue_t = aqueues.next(); 
    String q_name = queue_t.getPhysicalName();
    List<ActiveMQMessage> msgList = ((ActiveMQSession) session).getUnconsumedMessages();

    System.out.println( "\nQueue = " + q_name);

    QueueBrowser queueBrowser = session.createBrowser(queue_t);
    Enumeration e = queueBrowser.getEnumeration();

    int numMsgs = 0;
    while(e.hasMoreElements()) 
    {
         Message message = (Message) e.nextElement();
         numMsgs++;
    }
    System.out.println("No of messages = " + numMsgs);
    queueBrowser.close();
}                    
session.close();
connection.close();

【问题讨论】:

  • 这个问题你解决了吗?
  • @Ralf,还没有。我还注意到,即使是 Web 控制台也可以在第一时间检索 200 条消息。然后,在第二次尝试再次浏览时,msg count 增加到 400。接下来 600、800。我检查了 Web Console 代码,发现它也使用了 QueueBrowser。
  • 我目前的解决方案是在不确认的情况下使用所有消息。所以,我可以获得所有消息,并且仍然能够将它们保留在队列中。但是,我觉得它不可靠。下一个解决方案是一次又一次地浏览队列,直到达到最大 msg 计数。
  • 你解决过这个问题吗?我遇到了同样的问题。
  • 不,我没有解决这个问题。

标签: java jms activemq message-queue


【解决方案1】:

来自javax.jms.QueueBrowser API:

扫描完成时,邮件可能会到达并过期。 JMS API 不要求枚举的内容是队列内容的静态快照。这些更改是否可见取决于 JMS 提供程序。

您是否尝试过指定prefetch policy

【讨论】:

  • 感谢您的回答,但添加预取策略后行为相同。我编辑了有问题的代码。
【解决方案2】:

只需使用 JMX 连接到 Broker(例如使用 jconsole)。在特定队列上设置 MaxPageSize 属性超过 200 则您可以列出更多消息。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 2021-11-09
    • 2015-11-10
    • 2015-12-23
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多