Apache camel 骆驼文件轮询:在再次轮询之前完成批处理

Apache camel 骆驼文件轮询:在再次轮询之前完成批处理,apache-camel,Apache Camel,我有一个从中轮询的文件放置端点。我需要在接收文件时按顺序轮询这些文件,并且我使用cron表达式只在一天中的特定时间进行轮询。这是我的文件输入: file:///tmp/input?idempotent=true&moveFailed=/tmp/error&readLock=changed&readLockCheckInterval=2500&sortBy=file:modified&move=processed/&a

我有一个从中轮询的文件放置端点。我需要在接收文件时按顺序轮询这些文件,并且我使用cron表达式只在一天中的特定时间进行轮询。这是我的文件输入:

file:///tmp/input?idempotent=true&moveFailed=/tmp/error&readLock=changed&readLockCheckInterval=2500&sortBy=file:modified&move=processed/&scheduler=quartz2&scheduler.cron=0+0/5+0-3,5-23+*+*+?
我遇到的问题是,Camel轮询一批文件,但随后较新的文件会写入目录,因此在后续轮询中,会在前一批文件完成之前处理一个新文件

我在路线中添加了一些属性,以显示批次大小以及是否已完成,只是为了获取一些信息:

<camel:log message="Camel batch size: $simple{property.CamelBatchSize}, Camel Batch Index: $simple{property.CamelBatchIndex}, Camel Batch finished: $simple{property.CamelBatchComplete}"/>


我如何告诉Camel在上一批完成之前不要进行投票?我这样做是因为文件处理的顺序很重要。谢谢

不确定是否有任何现有方法可以直接通过文件路由中的cron作业来实现您的目标。但是,您可以通过使用3条路线来完成任务

  • Cron作业路径

    • 如果收集器路由已经启动,则向停止路由发出暂停信号(通过controlBus组件检查)
    • 在正确的时间启动收集器路由(由controlBus组件触发)
  • 收集器路径

    • 控制文件使用者行为
    • 批次完成时,向停止路线发出完成信号
  • 阻塞路径

    • 接收到信号时暂停收集器路由(由controlBus组件触发)