Hi,

Are there any working examples with a Camel transacted route and ActiveMQ
endpoints? There are a lot of parameters to toggle, and my test is not
quite working.

Essentially I have a route like this:

 SpringTransactionPolicy transactionalPolicy = new
SpringTransactionPolicy(transactionManager);
 transactionalPolicy.setPropagationBehaviorName("PROPAGATION_REQUIRED");
 from("activemq:SourceQueue")
   .errorHandler(transactionErrorHandler(transactionPolicy))
   .transacted().policy(transactionPolicy)
      .inOut(myProcessor)
      .inOnly("activemq:TargetQueue");

I have also configured the broker with an individual dead letter strategy:

  <individualDeadLetterStrategy
    queuePrefix="DLQ."
    useQueueForQueueMessages="true"
    processExpired="true"
    processNonPersistent="false"/>

If something fails in the route (ie. in myProcessor or producing to target
queue) I wish to have the message placed on the "DLQ.SourceQueue". A test I
created triggers a "ResourceAllocationException: Usage Manager Store is
Full" when producing to the target, as the broker is configured with a low
(enough) store usage. However, after the rollback the message is neither on
SourceQueue, TargetQueue, DLQ.SourceQueue nor DLQ.TargetQueue. I actually
would expect the message to still be on the SourceQueue, as there is no
store space to move the message to either of the other queues.

Is this as expected? I need to know how to prevent message loss in all
cases...

BR,
Thomas

Reply via email to