Java QueueBrowser不会返回所有消息

Java QueueBrowser不会返回所有消息,java,jms,activemq,message-queue,Java,Jms,Activemq,Message Queue,我列出了队列和每个队列中的消息。下面是我的代码。但是,QueueBrowser无法正确检索消息 比方说,我有一个名为TestQueue的队列,它有1000条消息 我第一次运行程序时,它只显示200条消息。 第二名-400 第三名-600 福斯-800 第五-1000 你能告诉我怎么解决这个问题吗 ConnectionFactory out = new ActiveMQConnectionFactory("tcp://localhost:61616?jms.prefetchPolicy.all=1

我列出了队列和每个队列中的消息。下面是我的代码。但是,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();
ConnectionFactory out=new-ActiveMQConnectionFactory(“tcp://localhost:61616?jms.prefetchPolicy.all=10000");
ActiveMQConnection连接=(ActiveMQConnection)out.createConnection();
connection.start();
会话会话=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
设置amqs=connection.getDestinationSource().getQueues();
迭代器队列=amqs.Iterator();
while(queues.hasNext())
{ 
ActiveMQQueue queue_t=aqueues.next();
字符串q_name=queue_t.getPhysicalName();
List msgList=((ActiveMQSession)session.getUnumedMessages();
System.out.println(“\nQueue=“+q\u name”);
QueueBrowser QueueBrowser=session.createBrowser(队列);
枚举e=queueBrowser.getEnumeration();
int numMsgs=0;
而(e.hasMoreElements())
{
消息消息=(消息)e.nextElement();
numMsgs++;
}
System.out.println(“消息数=”+numMsgs);
queueBrowser.close();
}                    
session.close();
connection.close();

来自
javax.jms.QueueBrowser
API:

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


您是否尝试过指定?

只需使用JMX连接到代理(例如使用jconsole)。在特定队列上,将MaxPageSize属性设置为大于200,然后您可以列出更多消息。

谢谢您的回答,但添加预回迁策略后的行为相同。我编辑了有问题的代码。你解决了这个问题吗?@Ralf,还没有。我还注意到,即使Web控制台第一次也可以检索200条消息。然后,在第二次尝试再次浏览时,msg计数增加到400。接下来是600,800。我检查了Web控制台代码,发现它也使用了QueueBrowser。我当前的解决方案是在不确认的情况下使用所有消息。所以,我可以获取所有消息,并且仍然能够在队列中维护它们。但是,我觉得它不可靠。下一个解决方案是一次又一次地浏览队列,直到满足最大消息计数。您解决过这个问题吗?我遇到了同样的问题。不,我没有解决这个问题。