camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steve Smith <>
Subject asyncDelayedRedelivery and JMS queues
Date Sun, 13 Feb 2011 23:36:31 GMT

All the documentation I've read (on the site and the book) implies
that if I enable asyncDelayedRedelivery on a queue's error handler the
queue should continue to deliver messages while there are retries
pending.  However I cannot get Camel to produce this behaviour.

To test this I've produced a small proof-of-concept app:

What it does:

 * Starts an embedded ActiveMQ broker, backed by a memory-only DB
 * Creates two Camel JMS endpoints: 'inputq' and 'expiredMessages'
 * There is a quartz job that injects 15 messages into the inputq, 1
second apart
 * Expired messages routes to a simple logging bean
 * 'inputq' is routed to a logging bean that throw errors a certain points:
 ** After 5 messages it throws a PermanentFailureException
 ** After 10 messages it throws a TemporaryFailureException
 * The error handler is configured as follows:
 ** PermanentFailureExceptions are immediately sent to the expired queue
 ** TemporaryFailureExceptions are retried with the following parameters:
 *** 3 retries
 *** 10 second delay between retries
 *** Asynchronous retries

What I expect to see:

* After the 10th message the remaining 5 messages are delivered and
logged immediately

What I actually see:

* The 5 messages are queued up, and only flush out after the 3 retries
of the 10th message

The only explanation of this that I can see is that the JMS queues are
transacted, but I see no warning or errors regarding this so it's not
clear.  Is this behavior expected?  Am I missing something?


View raw message