重复使用骆驼FTP路由
问题描述:
我有一个全局定义的FTP骆驼路由。这是从另一个途径启动:重复使用骆驼FTP路由
exchange.getContext().startRoute("downloadRoute");
,并在另一个线程停止,因为描述here:
.process(new Processor() {
Thread stop;
@Override
public void process(final Exchange exchange) throws Exception {
stop = new Thread() {
@Override
public void run() {
try {
log.info("Stopping route");
exchange.getContext().stopRoute("downloadRoute");
} catch (Exception e) {
} finally {
latch.countDown();
}
}
};
stop.start();
}
})
它工作正常。现在我想再次开始这条路线。假设我向文件夹添加了新文件,并希望再次下载它们,或者重新下载下载的文件。
所以我用相同的命令再次启动这个路由,但它不下载文件 - 它根本没有看到它们,因为它们标记为在路由的某处下载。而如果我从骆驼上下文中删除这条路线,然后再次添加并开始 - 它的工作原理 - 它再次下载文件。
所以问题是如何重用(启动 - 停止 - 启动)现有的路线,以便它开始作为一个新的?
答
我认为一般来说,这是Apache Camel的滥用。路线并不意味着在应用程序中反复启动或停止。 Camel中的路由通常用于定义,然后在应用程序启动时启动,然后不停止,直到应用程序停止。
如果您想要使用基于file consumer的路由(文件,FTP,SFTP等)按需重新下载文件,我认为正确的方法是从.camel目录中移动文件(其中下载的文件是默认放置)回到由文件消耗监视的目录。如果需要,你可以很容易地编程。
这应该会导致骆驼重新下载文件。完成后,骆驼将把它们放回.camel目录中。如果需要,您也可以使用与.camel不同的目录。使用移动文件组件标志(.camel是默认值)。
请尝试这一个https://*.com/questions/18211918/camel-ftp-only-run-once –
不,我能够停止路线。我无法再作为一个新的开始。 – streetturtle