I’m not sure I’m following you, but I can tell you what I normally do.

My JMS Consumers use “transacted=true”, which will use a JMS Session 
transaction.  You don’t need the acknowledgementModeName, and I don’t think you 
need ‘.transacted()’ (I believe this is for XA).

I then setup exception policies for the different types of exceptions, with 
appropriate redelivery handling.

For the case where I don’t have an exception policy for an exception, Camel 
will rollback the message.  I also use ActiveMQ, so the message will get moved 
to a DLQ after being rolled-back 6 times.

HTH

Quinn Stevenson
qu...@pronoia-solutions.com
(801) 244-7758



> On Sep 4, 2017, at 5:21 AM, Andreas Bergmann <bergmann...@gmail.com> wrote:
> 
> Hi all,
> 
> I have the scenario where I need to manipulate the acknowledgement of JMS
> messages, depending on exceptions.
> 
> The setup so far:
> I configured the JMS endpoint with
> '&transacted=true&acknowledgementModeName=SESSION_TRANSACTED' and I
> added .transacted() to the route definition.
> 
> As soon as I have an Exception the messages will not be acknowledged and
> 'redelivered' from the JMS - so far so good.
> 
> But I have several steps in the route, some of them have recoverable, some
> unrecoverable reasons.
> I first parse the incoming message and in case of an exception I do not
> want the JMS to be acknowledged, since this is an unrecoverable error.
> Then I consume the message, which includes a validation and an own 'retry
> handling' in case of an exception - in this case the JMS message should be
> acknowledged.
> In case of other Exceptions (i.e. na db connection) I do not want the
> message to be acknowledged.
> 
> I tried several options with 'doCatch', 'onException', 'setFault in the
> Consumer','.handled(true)', '.stop()'  - but found no way to solve this
> problem. I can either switch to 'always acknowledge in case of an
> exception' or 'never acknowledge on exception'.
> 
> Any ideas or examples?
> 
> Best regards,
> Andreas

Reply via email to