CamelMain处理大文件并停止路由并退出JVM



我需要使用以下两种情况来处理大文件(1( 从文件目录中提取并推送到FTP(2( 从一个FTP提取并推送到另一个FTP

我正在创建一个javamaven依赖项目,它使用camel组件来处理上面的文件传输用例,所以我决定使用org.apache.camel.main类来启动我的路由,但问题是即使文件处理成功,我的程序也不会关闭。在某个地方,我读到使用"System.exit(("可以解决问题,但问题仍然存在。

我的代码-

Main camelMain = new Main();
camelMain.enableHangupSupport();
camelMain.addRouteBuilder(getRouteBuilderLocaltoFTP());
camelMain.run();

RouteBuilder

public void configure() throws Exception { 
from(<File-Path>).routeId("local-to-ftp")
.onCompletion().process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getContext().stop();       
}
})
.toD(<FTP-Path>); 

还尝试使用控制总线.toF("controlbus:route?routeId=%s&action=stop&async=true","本地到ftp"(

但在这两种情况下,路由都在优雅地关闭,而不是关闭程序。

在这方面寻求帮助。

您可以在main上配置为在X段时间后或处理N条消息后关闭应用程序。您可以设置这两个AFAIR,例如在2分钟后关闭,以及在处理1条消息后关闭。

只需检查camelMain上的方法即可。请注意,这需要Apache Camel的最新版本。

这里记录了各种优雅关闭的方法。您可以尝试使用此代码关闭特定路线

camelContext.getRouteController().stopRoute("routeId");
camelContext.removeRoute("routeId");

最新更新