You can do something like this: Set the route in the header... public class RouteStopProcessor implements Processor { @Override public void process(Exchange exchange) throws Exception { String routeIdToRestart = (String)exchange.getIn().getHeader("routeIdToRestart"); CamelContext context = exchange.getContext(); context.stopRoute(routeIdToRestart); } } public class RouteStartProcessor implements Processor { @Override public void process(Exchange exchange) throws Exception { String routeIdToRestart = (String)exchange.getIn().getHeader("routeIdToRestart"); CamelContext context = exchange.getContext(); context.startRoute(routeIdToRestart); } } public class RestartContextProcessor implements Processor { private Logger log = LoggerFactory.getLogger(RestartContextProcessor.class.getName()); @Override public void process(Exchange exchange) throws Exception { CamelContext context = exchange.getContext(); context.getInflightRepository().remove(exchange); log.info("No Queue Activity for set period, will restart the context, ... Stopping Context: " + context.getName()); context.stop(); Thread.sleep(10000); context.start(); log.info("Restarting Application Context due to no Queue Activity, ... Started Context: " + context.getName()); } }
<route id="fadecAssetAndStatusMessageProcessing" autoStartup="false" > <from uri="sftp://{{ftpUsername}}@{{ftpHost}}:{{ftpPort}}/{{ftpPath}}?password={{ftpPassword}}&delete=false&move={{ftpMoveToPath}}&localWorkDirectory={{ftpLocalWorkDir}}&binary=true&readLock={{ftpReadLock}}&filter=#fadecXlsxFilter&consumer.delay=600s&disconnect=true" /> <choice> <when> <simple>${in.header[CamelFileName]} == 'FADEC_Fault_Codes.xlsx'</simple> <setHeader headerName="routeIdToRestart"> <constant>deltaFadecMQ</constant> </setHeader> <process ref="routeStopProcessor"/> <to uri="sql:truncate table geip_fadec.fadec_status_message"/> <process ref="faultMessageXlsxProcessor" /> <split> <simple>${body}</simple> <log message="Inserting into table geip_fadec.fadec_status_message: ${in.body}" loggingLevel="DEBUG"/> <to uri="sql:{{faultMessageInsertSQL}}"/> </split> <process ref="routeStartProcessor"/> </when> <when> <simple>${in.header[CamelFileName]} == "delta_asset_ids.xlsx"</simple> <setHeader headerName="routeIdToRestart"> <constant>deltaFadecMQ</constant> </setHeader> <process ref="routeStopProcessor"/> <to uri="sql:truncate table geip_fadec.asset_tag"/> <to uri="sql:delete from geip_fadec.asset where asset_id != ''"/> <to uri="sql:delete from geip_fadec.aircraft where ship_number != ''"/> <process ref="aircraftAssetXlsxProcessor" /> <process ref="routeStartProcessor"/> </when> -----Original Message----- From: ganga_camel [mailto:ganga...@gmail.com] Sent: Thursday, December 17, 2015 8:36 AM To: users@camel.apache.org Subject: Camel Routes: Identify end of Processing in a Route Hi, I am new to camel. I understand that Camel routes once started continue to be active and in running status unless its manually stopped. I have a requirement where the route should automatically stop after the processing of all the records are complete. Is there a way we can programitically force stop the route once all the records processing is complete? Thanks, Ganga -- View this message in context: https://urldefense.proofpoint.com/v2/url?u=http-3A__camel.465427.n5.nabble.com_Camel-2DRoutes-2DIdentify-2Dend-2Dof-2DProcessing-2Din-2Da-2DRoute-2Dtp5775224.html&d=CwICAg&c=IV_clAzoPDE253xZdHuilRgztyh_RiV3wUrLrDQYWSI&r=Hb1nXb7biSqY9NYScX39HfYaeuqILlgaLYiYNWt8oJo&m=9xST_mmOc0yWL6UJjx3ixAWRJzGfOUYVmXeJmEmRGvQ&s=XFPGPFZb9yi0_dOwjNj1TJARhjpeWrDyFeL0fV_a3gg&e= Sent from the Camel - Users mailing list archive at Nabble.com.