Apache camel 如何使用ApacheCamel';仅处理目录中的最后一个文件;s文件组件

Apache camel 如何使用ApacheCamel';仅处理目录中的最后一个文件;s文件组件,apache-camel,Apache Camel,我有一个包含如下文件的目录: inbox/ data.20130813T1921.json data.20130818T0123.json data.20130901T1342.json 我使用的是ApacheCalme2.11,在进程启动时,我只想处理一个文件:最新的。其他文件实际上可以忽略。或者,处理新文件后,可以删除旧文件 我正在使用以下配置我的组件,但它显然不能满足我的需要: file:inbox/?noop=true noop保留最后一个文件,但也保留所有其他文件。启动

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

inbox/
  data.20130813T1921.json
  data.20130818T0123.json
  data.20130901T1342.json
我使用的是ApacheCalme2.11,在进程启动时,我只想处理一个文件:最新的。其他文件实际上可以忽略。或者,处理新文件后,可以删除旧文件

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

file:inbox/?noop=true
noop
保留最后一个文件,但也保留所有其他文件。启动时,Camel处理所有现有文件,这超出了我的需要


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

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


有关详细信息,请访问:。有关排序,请参阅“使用排序方式进行排序”一节。

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


有关详细信息,请访问:。有关排序,请参阅使用sortBy进行排序一节。

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


此处记录了聚合器eip:

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


聚合器eip记录在此处:

每次轮询时,都会处理一个旧文件。每个周期只有一个,但我将读取旧文件。现在看看另一个答案。在消费者中,一旦我跟踪哪个文件是最新的。处理完后,使用
新文件(message.getHeader(Exchange.file\u PATH).toString.delete()
)删除第一个文件中“较旧”的任何其他文件。谢谢每次轮询时,都会处理一个旧文件。每个周期只有一个,但我将读取旧文件。现在看看另一个答案。在消费者中,一旦我跟踪哪个文件是最新的。处理完后,使用
新文件(message.getHeader(Exchange.file\u PATH).toString.delete()
)删除第一个文件中“较旧”的任何其他文件。谢谢