我使用Camel路由(R)将文件从A复制到B.但这是基于事件的,即路由R1轮询目录(C),当找到任何文件时,其处理器触发R复制文件然后暂停R。
我想确保,虽然暂停A中的所有现有文件都会复制到B,但只有我会暂停。但任何关机策略(在暂停时都不知道这是否得到尊重)确保只有待处理的消息进行处理,即只有当前文件(当前R正在其上工作)将被复制到B,然后才是暂停。但我希望所有现有的文件必须复制到B。
我该如何确保。
约束:
谢谢, 阿布舍克巴克
答案 0 :(得分:1)
有时,使用我们在" pre-Camel"中使用的旧的Java堆栈更容易。时代。也就是说,在单独的Processor
(或Camel unware bean)中自行复制文件:
@Override
public void process(final Exchange exchange) throws Exception {
final File source = new File("/path/to/in-directory");
final File desc = new File("/path/to/out-directory");
org.apache.commons.io.FileUtils.copyDirectory(source, desc);
}
对于文件副本,使用Apache Commons项目中的org.apache.commons.io.FileUtils
。
修改强>
正如@Petter正确指出的那样,使用此解决方案,无需创建和启动必须再次关闭的单独路由。目录复制处理器可以添加到触发复制的R1
处理器中。
答案 1 :(得分:0)
这甚至是个问题吗?
假设您在路径中有一个OnCompletion来计算文件夹中的消息数,如果没有文件,则关闭该路径。