camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Karlsen <davidkarl...@gmail.com>
Subject Re: Rollback and redeliver JMS message between Websphere and MQ via Camel
Date Fri, 09 Nov 2012 16:00:35 GMT
Configure number of redeliveries to be 0. You might also be interested in
looking into the docs for the transactional error handler which is default
for transacted routes.
Den 9. nov. 2012 10:09 skrev "De Backer Frederik (Belfius)" <
Frederik.DeBacker@belfius.be> følgende:

> Hello,
>
> I have a message driven bean deployed in a Websphere 8.0 server that is
> consuming messages from a Websphere MQ message broker. I would like to
> replace the MDB by a Camel JMS component but I have some issues regarding
> the proper handling of message rollback and XA transactions. The message
> processing does database updates. If an exception occurs during this
> database update (or any other runtime exception occurs) then the database
> updates and the message reception need to be rollbacked (placing the
> message back on the qeue). Up to three redeliveries occur after which the
> WAS message listener puts the message in a backout queue. This setup is
> currently working.
> I tried to mimick this behaviour with Camel but have been unsuccessfull
> until now.
>
> What I see is that Camel itself retries 3 times (without putting back the
> message onto the queue). Only after doing three retries, Camel rollbacks
> the transaction and the message is put back on the queue after which it is
> again redelivered from the queue.
>
> What I would like however is that Camel itself doesn't do a retry but
> immediately rollbacks the message to the queue if an exception occurs. If
> Camel notices that three redeliveries from the queue have been done (this
> can be checked via a custom JMS header property that is set by MQ and that
> indicates the number of redeliveries) then the message has to be placed on
> a backout queue by Camel.
>
> I already looked around but until now I have no idea how I can implement
> this use case.
>
> Below you can find my Camel config file. I am using Camel 2.10.1.
>
> Any help would be greatly appreciated.
>
> kind regards,
>
> Frederik.
>
>
>         <bean id="required"
> class="org.apache.camel.spring.spi.SpringTransactionPolicy">
>                 <property name="transactionManager"
> ref="transactionManager" />
>                 <property name="propagationBehaviorName"
> value="PROPAGATION_REQUIRED" />
>         </bean>
>
>         <camel:camelContext xmlns="http://camel.apache.org/schema/spring"
> id="camelContext">
>                 <endpoint id="async.internal.inbound.endpoint"
> uri="jms:queue:GEPQ.QL.IN_PRINT_CONFIRM.0001?exchangePattern=InOnly" />
>                 <camel:route>
>                         <camel:from
> uri="ref:async.internal.inbound.endpoint" />
>                         <camel:transacted ref="required" />
>                         <camel:process ref="asyncInternalEndpointImpl" />
>                         <camel:onException >
>
> <camel:exception>java.lang.Throwable</camel:exception>
>                                 <camel:redeliveryPolicy
> redeliveryDelay="5000" maximumRedeliveries="3"></camel:redeliveryPolicy>
>                                 <camel:handled>
>                                         <constant>false</constant>
>                                 </camel:handled>
>                                 <camel:to
> uri="jms:queue:GEPQ.QL.IN_PRINT_CONFIRM_BO.0001" />
>                                 <camel:rollback markRollbackOnly="true" />
>                         </camel:onException>
>
>                 </camel:route>
>
>         </camel:camelContext>
>
>         <bean id="jmsConfig"
> class="org.apache.camel.component.jms.JmsConfiguration">
>                 <property name="connectionFactory"
> ref="geosConnectionFactory" />
>                 <property name="concurrentConsumers" value="1" />
>                 <property name="maxConcurrentConsumers" value="10" />
>                 <property name="cacheLevelName" value="CACHE_NONE" />
>                 <!--<property name="transacted" value="false" />-->
>                 <property name="transactionManager"
> ref="transactionManager" />
>                 <property name="taskExecutor" ref="wasTaskExecutor" />
>                 <property name="disableReplyTo" value="true" />
>                 <property name="errorHandlerLoggingLevel" value="DEBUG" />
>         </bean>
>
> Frederik De Backer
>
> Belfius
> ITDEV/DCAR/DART
>
> * DT 16 / 37
> * 02/22 25252
> * mailto:frederik.debacker@belfius.be  | www.belfius.be
>
>
>
>
> -----------------------------------------------------------------------------
>
> http://www.belfius.be/maildisclaimer.htm
>
>
> -----------------------------------------------------------------------------
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message