camel-users mailing list archives

Hi,
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:
https://github.com/tarka/Camel-Async-Test
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?
Thanks,
Steve