activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "maarten.dirkse" <>
Subject Producer flow control question
Date Fri, 17 Dec 2010 16:44:57 GMT

It's often said that producer flow control (PFC) is one of the most
misunderstood features of ActiveMQ, and I couldn't agree more. After what
I'd like to think was a pretty close read on the subject of the online docs,
ActiveMQ in Action and the mailing list, I still can't figure out why my
producer stalls indefinitely after PFC kicks in. And as the indefinite
blocking of a producer is, as AMQ in Action says, "rather inefficient", I
was wondering if someone could help me out.

I have three components, lets call them A, B and C. My test is supposed to
run like this: A produces roughly 11 million messages and puts them onto a
topic (with a mem limit of 1mb). B listens to the topic and puts the
messages on a queue, which is listened to by C which processes all incoming
messages. B is somewhat slower than A, so I enabled producer flow control
for topics. All messages are persistent (so enabling flow control for topics
wasn't really necessary, I suppose).

If I run the test with just component A, it works fine. PFC doesn't kick in,
as there is no client listening to the topic. So far so good. If I then add
B and C to the test, it runs until roughly 190,000 messages, at which point
PFC kicks in, A is blocked, and the whole thing comes to a screeching halt.
Just to be sure I enabled producerWindowSize and alwaysSyncSend on the
connection (even though I shouldn't need to, as far as I understand, as the
messages are persistent). That didn't help.

So now I'm stuck as to why PFC has completely blocked my producer. As I
understand it, the idea of PFC is to block the producer until there are
sufficient resources to restart delivery. However, PFC does halt my
producer, but doesn't start it up again, even when B and C have finished
processing all their messages (and presumably freed up the necessary

What am I doing wrong? How do I get component A to start sending again?

I'm running AMQ 5.4.2, Java 1.6 update 22, and the Spring (2.5.6)
JMSTemplate and SimpleMessageContainer for sending/receiving.

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

View raw message