Hi

Setting a longer redelivery delay on the broker side may help to stop
the route, without having the message being redelivered so quickly.

Also you are using handled(true) which you should not do. Otherwise
the transaction will commit, as the failure was handled.


On Fri, Nov 30, 2012 at 10:13 AM, Praan <[email protected]> wrote:
> Dear All,
>
> I would like to discuss/have some advice on the following:
> Functional requirement:
> In case an error occurs in our route while while processing a message from
> ActiveMQ queue.
> We want the message to return back to the queue and the route to stop
> working.
>
> Technically we think we need a combination of Transaction, onException
> handeling and a way to stop the route from further processing/running.
>
> This results in the following code:
>
> Camel transaction/activemq related configuration:
>     <bean id="jms"
> class="org.apache.activemq.camel.component.ActiveMQComponent">
>         <property name="transacted" value="true"/>
>         <property name="transactionManager" ref="txManager"/>
>         <property name="connectionFactory" ref="jmsConnectionFactory"/>
>     </bean>
>
>     <bean id="txManager"
> class="org.springframework.jms.connection.JmsTransactionManager">
>         <property name="connectionFactory" ref="jmsConnectionFactory" />
>             </bean>
>
>     <bean id="jmsConnectionFactory"
> class="org.apache.activemq.ActiveMQConnectionFactory">
>         <property name="brokerURL" value="tcp://localhost:61616"/>
>     </bean>
>
>     <bean id="txPolicy"
> class="org.apache.camel.spring.spi.SpringTransactionPolicy">
>         <property name="transactionManager" ref="txManager"/>
>         <property name="propagationBehaviorName"
> value="PROPAGATION_REQUIRED"/>
>     </bean>
>
> //stop the route in the onException
> onException(IOException.class)
>                 .process(new Processor() {
>                     Thread stopRouteInAnotherThread;
>
>                     @Override
>                     public void process(final Exchange exchange) throws
> Exception {
>                         // stopRouteInAnotherThread this route using a
> thread that will stopRouteInAnotherThread
>                         // this route gracefully while we are still running
>                         if (stopRouteInAnotherThread == null) {
>                             stopRouteInAnotherThread = new Thread() {
>                                 @Override
>                                 public void run() {
>                                     try {
>
> exchange.getContext().stopRoute("poc-transaction");
>                                     } catch (Exception e) {
>                                         // ignore
>                                     }
>                                 }
>                             };
>                         }
>
>                         // start the thread that stops this route
>                         stopRouteInAnotherThread.start();
>                     }
>                 })
>                 .maximumRedeliveries(0)
>                 .handled(true);
> Simple Route:
> from("jms:queue:myQueueStart")
>                 .routeId("poc-transaction")
>                 .transacted(TX_POLICY_SPRING_BEAN)
>                 .process(new Processor() {
>                     @Override
>                     public void process(Exchange exchange) throws Exception
> {
>                         throw new IOException("test");
>                     }
>                 }).to("jms:queue:myQueueEnd");
>
> The route is stopped though we expected the message not to be dequeue'd but
> it is dequeue'd.
>
> Does anyone know how to achieve this?
>
> Cheers,
> Praan
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Transactions-Error-Stop-route-tp5723438.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to