如何使用Apache Camel的文件组件仅处理目录中的最后一个文件

时间:2013-09-03 01:30:24

标签: apache-camel

我有一个包含以下文件的目录:

inbox/
  data.20130813T1921.json
  data.20130818T0123.json
  data.20130901T1342.json

我正在使用Apache Camel 2.11并且在进程启动时,我只想处理一个文件:最新的。实际上可以忽略其他文件。或者,一旦处理完新文件,就可以删除旧文件。

我正在使用以下内容配置我的组件,但它显然不能满足我的需要:

file:inbox/?noop=true

noop会保留最后一个文件,但也包含所有其他文件。在启动时,Camel处理所有现有文件,这比我需要的更多。

仅处理最新文件的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用排序,然后按名称排序,并可能需要将其反转,以便最新的是第一个/最后一个。您可以尝试一下,看看您需要哪一个。然后将maxMessagesPerPoll = 1设置为仅拾取一个文件。您需要设置eagerMaxMessagesPerPoll = false以允许在限制文件数量之前进行排序。

您可以在http://camel.apache.org/file2找到详细信息。请参阅使用sortBy排序部分进行排序。

答案 1 :(得分:1)

另一种方法是仍然使用排序来确保最新文件是最后一个。然后,您可以使用聚合器EIP聚合所有文件,并使用org.apache.camel.processor.aggregate.UseLatestAggregationStrategy作为聚合策略,仅保留最后一个(这将是最新文件)。然后,您可以指示文件端点delete = true以在完成后删除文件。然后,您还需要将聚合器配置为completionFromBatchConsumer=true

聚合器eip记录在此处:http://camel.apache.org/aggregator2