java - QueueBrowser 不返回所有消息

标签 java jms activemq message-queue

我列出了队列和来自每个队列的消息。以下是我的代码。但是,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();

最佳答案

来自 javax.jms.QueueBrowser API:

Messages may be arriving and expiring while the scan is done. The JMS API does not require the content of an enumeration to be a static snapshot of queue content. Whether these changes are visible or not depends on the JMS provider.

您是否尝试过指定 prefetch policy

关于java - QueueBrowser 不返回所有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394556/

相关文章:

java - Apache Camel ?transacted=true

java - 正确关闭 ActiveMQ 嵌入式代理

java - 让代码尝试不同的事情直到成功

java - Spring - JMS,在 JMS activemq 服务器启动/停止几次后,监听器服务器抛出 java.io.EOFException,然后不连接到正在运行的 JMS

java - 为什么 @UniqueConstraint 无法从父类(super class)中找到列?

jakarta-ee - 无法通过 Glassfish 4.1 Web 管理员创建任何 JMS 资源

jms - FOSRestbundle、JMS Serializer 和 SonataMediaBundle 返回图像的公共(public) url

java - ActiveMQ 5.x 和 DurableConsumer

java - 检查 key 是否在 map 中 - 一种方法有效,另一种方法无效

java - 来自 Java 代码的工作流程暂停