On Tue, Jun 14, 2011 at 12:45 PM, janne postilista
<jannepostilis...@gmail.com> wrote:
> I have routes that read from JMS queue and write to another queue and
> do some processing in between. Queues are in external ActiveMQ server.
>
> I am confused about how error handling and configuring for example
> retries is configured.
>
> - my route is marked <transacted/> and because of that, it uses
> TransactionErrorHandler
> - http://camel.apache.org/transactional-client.html states that
> "Configuration of Redelivery: The redelivery in transacted mode is not
> handled by Camel but by the backing system (the transaction manager).
> In such cases you should resort to the backing system how to configure
> the redelivery.". This I understand means that I configure "when
> exceptions happen, delivery is tried 10 times before moving message to
> dead letter queue" stuff to ActiveMQ, not Camel.
> - http://camel.apache.org/transactionerrorhandler.html states that "As
> the TransactionErrorHandler also supports to let Camel do redeliveries
> you can use both worlds. Letting Camel do some redeliveries and at the
> end the backing transaction manager doing other redeliveries. In fact
> in the end the transaction manager have the final word. That means if
> Camel cannot process the exchange then its thrown back to the
> transaction manager that will perform the rollback, and redelivery.".
> This I understand means means TransactionErrorHandler does it's own
> redeliveries before ActiveMQ tries delivery?
>
> What if I configure 10 retries to both ActiveMQ and
> TransactionalErrorHandler, is message processing retries 10*10 = 100
> times if it throws an exception? Is that how it works?
>

Yes the TransactionErrorHandler used to not support Camel doing
redelivery, but thats added now.

When AMQ do redelivery, its a "all the way" redelivery, meaning when
an error occurs, the entire exchange rolls back.
And Camel will consume the message again - potentially using a new
thread etc. There is no state shared between the redelivery attempts
etc. Its only because AMQ put a flag on the message, that you know its
a redelivery. JMSRedelivered.

When Camel does redelivery, its a "fine grained" redelivery. As it
retries "where the error occurred". So if you have:

>From X
 to Y
 to Z

and the error occur at "to Z" then it only retry at that point.
However if AMQ does a redelivery, its "restarting".

You can pick and chose. Buts its recommended to keep it KISS.



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to