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

Reply via email to