骆驼悬挂策略

时间:2014-04-03 15:04:19

标签: apache-camel

我使用Camel路由(R)将文件从A复制到B.但这是基于事件的,即路由R1轮询目录(C),当找到任何文件时,其处理器触发R复制文件然后暂停R。

我想确保,虽然暂停A中的所有现有文件都会复制到B,但只有我会暂停。但任何关机策略(在暂停时都不知道这是否得到尊重)确保只有待处理的消息进行处理,即只有当前文件(当前R正在其上工作)将被复制到B,然后才是暂停。但我希望所有现有的文件必须复制到B。

我该如何确保。

约束:

  1. 路由R必须是​​基于事件的,当只有一个事件发生时,它只会将现有的日志文件从A复制到B,然后它将进入休眠状态,直到下一个事件发生
  2. 如果R是基于事件的,并且因为A是所有日志所在的日志文件夹,我不能每次都复制所有日志......一个巨大的尺寸
  3. 复制后我无法从A中删除文件
  4. 谢谢, 阿布舍克巴克

2 个答案:

答案 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来计算文件夹中的消息数,如果没有文件,则关闭该路径。