On Sat, Aug 25, 2012 at 7:13 PM, Ashwin Pejavar <ashwin.peja...@gmail.com> wrote: > I have a use-case where I need to consume files at a fixed cron schedule. > > For example, I need my input route to resume everyday at 6AM, process all > files collected in the input directory and go into suspension till 6AM the > following day. > > I was hoping the CronScheduledRoutePolicy would be useful, but that doesn't > quite do what I need. I can use it to start the route at 6AM, but there > seems to be no way of automatically suspending it when all the files are > processed. > > Is there a way of doing this in Camel? >
See this FAQ http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html You could possible either extend the cron scheduled route policy, and add logic in the onExchangeDone and figure out if its the last exchange from the file batch. And then if so stop/suspend the consumer. The file consumer is cheap to suspend as its an internal flag that indicate its suspended (AFAIR). And therefore you most likely wont need to use a separate thread as the FAQ tells to do. The file consumer will set a property on the exchange when there is no more files (eg the batch is complete) exchange.setProperty(Exchange.BATCH_COMPLETE, true); So you can check for that property, and know when you are done, and can suspend the consumer. Something a like onExchangeDone(Route route, Exchange exchange) { // check for batch complete if (...) { // stop will favor suspend over stopping, so its fine to invoke this method stopConsumer(route.getConsumer()); } } And on the file component you would need to enable the sendEmptyMessageWhenIdle=true option to send an empty message if there is no files. So the routing will kick in. You would need to cater for an empty message in your route logic though. A total different approach would be to use a custom PollingConsumerPollStrategy on the file endpoint. http://camel.apache.org/polling-consumer.html It has callbacks when the polling starts / commits. And the number of polled messages (eg number of files found). You can then use that to implement logic to suspend the consumer in the commit method. That may be an easier task to try out at first. Extending the DefaultPollingConsumerPollStrategy and override the commit method. > > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Periodic-route-activation-use-case-tp5718059.html > Sent from the Camel - Users mailing list archive at Nabble.com. -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen