我需要使用以下两种情况来处理大文件(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");