0

我有一个目录,其中包含如下文件:

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

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

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

file:inbox/?noop=true

noop确实保留最后一个文件,但也保留所有其他文件。启动时,Camel 会处理所有现有文件,这超出了我的需要。

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

4

2 回答 2

3

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

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

于 2013-09-03T08:08:52.723 回答
1

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

聚合器 eip 记录在这里:http ://camel.apache.org/aggregator2

于 2013-09-03T08:12:50.507 回答