activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From StefanL <>
Subject Producer and consumer hangs with specific scenario
Date Fri, 21 Sep 2007 08:32:57 GMT

We're having a strange problem in our environment when the consumer is not
receiving any 
more messages from the queue since the broker considers the consumer queue
filled to the
prefetch size and messages not acked though they are/should be. They are
received and handled by the consumer.

I have managed to reproduce the behaviour with slightly modified examples
from the binary distro. see attachment.

In short what's needed is that the consumer sends a message while the broker
queue is full, usage = 100 
and the prefetch is also reached.

To reproduce run the examples as they are on your system to get your max
queue size and check the jconsole figures.

cmd>  ant consumer -Dmax=100000 -DsleepTime=10
cmd>  ant producer -Dmax=100000

I get QueueSize = 8042 and that is the steady state, producer sends messages
as they are acked from 
the consumer and this can go on forever.
(Modify the message size, memory size etc and you can get other figures.)

Now use the attached 
The modification is that it creates a separate thread with a new jms session
on which it sends a heart 
beat message every 2 seconds. As long as the broker queue is not filled this
works fine, test this by using 

cmd>  ant consumer -Dmax=100000 
cmd>  ant producer -Dmax=100000 

Now make sure the broker queue gets filled by 
cmd>  ant consumer -Dmax=100000 -DsleepTime=2
cmd>  ant producer -Dmax=100000 

Now everything freezes 1000 messages after the most recent heart beat sent
by the consumer when the broker queue is full..
What happens? 

I've read the post
but in that scenario the answer is sent within onMessage and will of course
be blocked as the already blocked producer.
Here it's on a separate thread.

TIA /Stefan 

View this message in context:
Sent from the ActiveMQ - User mailing list archive at

View raw message