Thanks Hadrian, that worked a treat!
On Mon, 2011-04-04 at 08:20 -0700, Hadrian Zbarcea wrote: > I would use option [1], using probably quartz instead of timer. > > Hadrian > > On Apr 4, 2011, at 11:09 AM, Paul Lowry wrote: > > > Hi, > > > > I am using Camel 2.4.0 to define routes in XML (Spring configuration > > files). I want my route to read all messages from a JMS queue, at > > regular intervals. I also want to keep my route as simple as > possible, > > for easy maintenance. > > > > When I look for info about this, there's lots of advice but nothing > > definitive. Included below are paraphrased versions of the info I > found. > > > > Please advise on which approach is the simplest and/or most > reliable. > > > > Thanks, > > Paul > > > > [1] > > > > Approach #1: a timer consumer, then a pollEnrich processor to > > pull in a JMS message. > > > > Example: > > <route id="RetryTimerRoute"> > > <from uri="timer://myTimer?period=3600000"/> > > <pollEnrich uri="activemq:queue:MyQueue"/> > > ... > > </route> > > > > Note: > > It might be necessary to set the pre-fetch value for the JMS > connection > > to zero, i.e. "activemq:queue:MyQueue?consumer.prefetchSize=0" > > > > References: > > http://camel.apache.org/content-enricher.html > > http://camel.apache.org/polling-consumer.html > > http://activemq.apache.org/destination-options.html > > http://activemq.apache.org/what-is-the-prefetch-limit-for.html > > > > [2] > > > > Approach #2: use templates to move messages onto another > > queue at regular intervals; then let consumer of that queue process > all > > messages. > > > > Example: > > public static class MyRetryTimer { > > private ConsumerTemplate consumer; > > private ProducerTemplate producer; > > public void setConsumer(ConsumerTemplate consumer) { > > this.consumer = consumer; > > } > > public void setProducer(ProducerTemplate producer) { > > this.producer = producer; > > } > > public void transferMessagesForRetry() { > > // move all messages > > while (true) { > > String msg = consumer.receive("activemq:queue:MyFirstQueue", > > 1000); > > if (msg == null) { > > // no more messages > > break; > > } > > producer.send("activemq:queue:MySecondQueue", msg); > > } > > } > > } > > <bean id="RetryTimer" class="MyRetryTimer"/> > > <route id="RetryTimerRoute"> > > <from uri="timer://myTimer?period=3600000"/> > > <to uri="bean:RetryTimer?method=transferMessagesForRetry"/> > > </route> > > <route id="RetryRoute"> > > <from uri="activemq:queue:MySecondQueue"/> > > ... > > </route> > > > > Notes: > > How do I inject the consumer & producer? > > > > References: > > http://camel.apache.org/polling-consumer.html > > > http://fusesource.com/docs/router/2.6/prog_guide/Templates-Consumer.html > > > > [3] > > > > Approach #3: define a task executor in spring, and use it to set the > > consumer's "taskExecutor" option. This is not well documented. > > > > Example: > > <bean class="org.springframework.core.task.TimerTaskExecutor"> > > <!-- some config goes here --> > > </bean> > > <route id="RetryRoute"> > > <from > > > uri="activemq:queue:MyQueue?taskExecutor=org.springframework.core.task.TimerTaskExecutor"/> > > ... > > </route> > > > > Notes: > > Is the example correct? How do I configure the spring task executor? > > > > References: > > http://camel.apache.org/jms > > > http://static.springsource.org/spring/docs/2.5.6/reference/scheduling.html > > https://issues.apache.org/jira/browse/CAMEL-3286 > > > > -- > > > > EOF > > > > STRICTLY PRIVATE, CONFIDENTIAL AND PRIVILEGED COMMUNICATION. > > > > This message (including attachments) may contain information that is > > privileged, confidential or protected from disclosure. They are > intended > > solely for the use of the intended recipient. If you are not the > > intended recipient, you are hereby notified that dissemination, > > disclosure, copying, distribution, printing, transmission or use of > this > > message or any information contained in it is strictly prohibited. > If > > you have received this message from NewBay Software in error, please > > immediately notify the sender by reply email and delete this message > > from your computer. The content of this e-mail, and any files > > transmitted with it, may have been changed or altered without the > > consent of the author. Although we have taken steps to ensure that > this > > email and attachments are free from any virus, we advise that in > keeping > > with good computing practice the recipient should ensure they are > > actually virus free. > > > > STRICTLY PRIVATE, CONFIDENTIAL AND PRIVILEGED COMMUNICATION. This message (including attachments) may contain information that is privileged, confidential or protected from disclosure. They are intended solely for the use of the intended recipient. If you are not the intended recipient, you are hereby notified that dissemination, disclosure, copying, distribution, printing, transmission or use of this message or any information contained in it is strictly prohibited. If you have received this message from NewBay Software in error, please immediately notify the sender by reply email and delete this message from your computer. The content of this e-mail, and any files transmitted with it, may have been changed or altered without the consent of the author. Although we have taken steps to ensure that this email and attachments are free from any virus, we advise that in keeping with good computing practice the recipient should ensure they are actually virus free.