activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jason Rosenberg <>
Subject Redelivery sticks to and blocks a consumer thread
Date Wed, 17 Oct 2007 20:02:43 GMT


I have been experimenting with using exponentialBackOff as a redelivery
policy.  I have multiple parallel consumers.  I'm using AMQ 4.1.1, using
Spring's DefaultMessageListener, within Tomcat 6.

I've noticed that when a message consumer has a failure, and throws an
exception, and the message gets scheduled for retry, the particular consumer
thread gets tied to the redelivery, and it doesn't process any more messages
until it's gone through the full redelivery schedule for the error prone
message.  So, with the exponentialBackOff mode, it's easy to set it to wait
10 minutes before redelivering a failed message, and in that time that
consumer will be blocked.

If the consumer has a pre-fetch greater than 1, this means other messages
which might be perfectly valid for processing are blocked until the troubled
message goes through it's full redelivery cycle (which could be

I'm wondering if there's an alternate way to configure things, so that a
message marked for redelivery goes back on the queue to be scheduled by the
next available consumer (and not until it's next scheduled redelivery time
has arrived!)....

If I have a queue with multiple consumers, and perhaps even a small
percentage of the messages are corrupt and force multiple retries, it could
eventually happen that all consumers are blocked waiting idly to retry the
message at the top of it's list, even though other messages are readily
available.  This would seem to be the case even when the prefetch limit is


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

View raw message