QueueBrowser does not return all messages

I list the queues and messages from each queue. Below is my code. But QueueBrowser does not receive messages correctly.

Let's say I have a queue called TestQueue that has 1000 messages.

The first time I run my program, it shows only 200 messages. second - 400 third - 600 fourth - 800 fifth - 1000

Can you tell me how to fix this problem?

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(); 
+8
java jms activemq message-queue
source share
2 answers

From the javax.jms.QueueBrowser API:

Messages may appear and end during scanning. The JMS API does not require the contents of an enumeration to be a static snapshot of the contents of a queue. Whether these changes are visible or not depends on the JMS provider.

Have you tried to specify a prefetch policy?

+3
source share

Just connect using JMX to the broker (e.g. use jconsole). In a specific queue, set the MaxPageSize properties to more than 200, then you can list more messages.

0
source share

All Articles