activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bryan <>
Subject Throttling deadlock
Date Wed, 30 Nov 2011 19:32:07 GMT
I'm encountering a deadlock related to throttling (producer flow control).
Here is the scenario which causes this. I receive a message from a queue,
process this message, and send a message to a different queue inside the
message handler. When throttling kicks in, this results in a deadlock. The
new message send blocks when throttling has kicked in, and it is waiting for
a message to be dequeued. But the original message sent does not seem to be
marked as being dequeued by the throttler until after I exit from the
message handler (which is blocked). Hence I'm deadlocked.

I can avoid the deadlock by using a separate thread to send the new message.
I can also avoid the deadlock by using async sends. Both have downsides,
however. Using a separate thread will require some logic wrapping every
message send. Using async sends bypasses throttling altogether (not what I
want), and has other consequences.

Is using async sends with connctionFactory.setProducerWindowSize() the
correct approach to prevent throttling from deadlocking? I don't really want
to use async sends other than to avoid this problem. Or is there a way to
indicate to the throttler to unblock immediately after a receive() call?

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

View raw message