On Thu, Jun 25, 2009 at 9:08 AM, Serge Merzliakov <sm...@epistatic.net>wrote:
> > Hello, > I would like some advice on the best way to use Camel (1.5), Spring > (2.5.6), XML and JMS (activeMQ 5.2) to RELIABLY resubmit messages from a > retry queue back to original destination queue: > > 1. listen for messages arriving on from a 'retry' queue > 2. If message on 'retry' queue has been retried too many times then > move it to a 'dead letter' queue immediately. > 3. If the message can be retried, delay for X number of seconds and > then resubmit the message back to queue from which it originally came (I > get > this queue from JMS property inside message). > > I have read references of how to do this but cannot find a cohesive single > example. > > My attempts so far: > ** Success - I have got a sample working which use reads messages off a > queue in a transaction and if an exception is thrown the message remains on > the source queue (this was relatively straightforward and I am very happy > with the way it works). > > ** Success - If i read a message from the queue and it has been waiting for > longer than its retry interval then I send it to its destination. > > ** Failure - If I read a message and decide to leave it on the retry queue > (retry interval not yet reached - its too soon to try again) - I need to > throw an unneccesary exception - this creates error log entries and is > 'messy'. All I want to here is stop processing the message. In Camel 2.0 you have a rollback() DSL that does not log errors. However spring-jms will still log it as there is nothing we can do to prevent spring from logging it. And there is also a stop() so you can stop continue routing a message. > > > I have attached my spring config as well (i have left out stuff from <bean> > root element for clarity): > > <beans> > <!-- use tcp as broker is external process to this demo --> > <bean id="jmsConnectionFactory" > class="org.apache.activemq.ActiveMQConnectionFactory"> > <property name="brokerURL" value="tcp://localhost:61616" /> > </bean> > > <cm:camelContext id="camel"> > <cm:route> > <cm:from uri="jms:queue:input" /> > <cm:bean ref="myProcessor" beanType="Processor" /> > <!-- !!!! NOTE - no destination queue here - I route > using JMS property value --> > </cm:route> > </cm:camelContext> > > <!-- My Processor Bean Implements the Processor Interface --> > <bean id="myProcessor" class="cameldemo.TransformA"> > <property name="jmsTransactionManager" > ref="jmsTransactionManager" /> > </bean> > > <bean id="jmsTransactionManager" > class="org.springframework.jms.connection.JmsTransactionManager"> > <property name="connectionFactory" > ref="jmsConnectionFactory" /> > </bean> > > <bean id="jmsConfig" > class="org.apache.camel.component.jms.JmsConfiguration"> > <property name="connectionFactory" > ref="jmsConnectionFactory" /> > <property name="transactionManager" > ref="jmsTransactionManager" /> > <property name="transacted" value="true" /> > <property name="concurrentConsumers" value="1" /> > </bean> > > <bean id="activemq" > class="org.apache.activemq.camel.component.ActiveMQComponent"> > <property name="configuration" ref="jmsConfig" /> > </bean> > </beans> > > Regards, > Serge > > > > > -- > View this message in context: > http://www.nabble.com/Best-Approach-Example-for-resubmission-to-JMS-queue-from-a-retry-queue-tp24198091p24198091.html > Sent from the Camel - Users mailing list archive at Nabble.com. > > -- Claus Ibsen Apache Camel Committer Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/ Twitter: http://twitter.com/davsclaus