0

我有一个从中轮询的文件放置端点。我需要在收到文件时按顺序轮询文件,并且我使用 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:log message="Camel batch size: $simple{property.CamelBatchSize}, Camel Batch Index: $simple{property.CamelBatchIndex}, Camel Batch finished: $simple{property.CamelBatchComplete}"/>

我怎么能告诉骆驼在上一批完成之前不要轮询?我这样做是因为文件处理的顺序很重要。谢谢!

4

1 回答 1

0

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

  1. Cron 作业路线

    • 如果 Collector 路由已经启动,则向 Stopper 路由发出挂起信号(通过 controlBus 组件检查)
    • 在正确的时间启动收集器路由(由 controlBus 组件触发)
  2. 收藏家路线

    • 控制文件消费者行为
    • 批处理完成时向 Stopper 路由发出完成信号
  3. 停止路线

    • 收到信号时暂停收集器路由(由 controlBus 组件触发)
于 2018-05-11T02:27:10.257 回答