Apache camel 用于多文件处理的Camel

Apache camel 用于多文件处理的Camel,apache-camel,Apache Camel,我是骆驼队的新手。我将使用camel进行文件处理,但我还没有找到适合我的案例的现成解决方案。我必须一起处理多个文件,以防它们存在。这些文件被延迟上传到特定文件夹(例如:我们有两个文件A.csv和B.csv,A.csv比B.csv晚上传10秒,反之亦然)。此外,如果一个文件缺席超过特定时间,我只需要处理一个文件。有人能帮我选择一种款式吗?据我所知,我可以使用驼峰过滤器来确保我们已经有了这两个文件A.csv和B.csv,然后才开始处理,但这并不能解决我的问题。这是 并将其传递给聚合器: from("

我是骆驼队的新手。我将使用camel进行文件处理,但我还没有找到适合我的案例的现成解决方案。我必须一起处理多个文件,以防它们存在。这些文件被延迟上传到特定文件夹(例如:我们有两个文件A.csv和B.csv,A.csv比B.csv晚上传10秒,反之亦然)。此外,如果一个文件缺席超过特定时间,我只需要处理一个文件。有人能帮我选择一种款式吗?据我所知,我可以使用驼峰过滤器来确保我们已经有了这两个文件A.csv和B.csv,然后才开始处理,但这并不能解决我的问题。

这是

并将其传递给聚合器:

from("file:inputDirectory")
    .aggregate(CORRELATION_EXPRESSION, AggregationStrategies.groupedExchange())
    ...

有关完整示例,请参见本要点

谢谢。您还知道如何根据这两个文件的名称处理它们吗?我的意思是:例如,文件夹中有很多文件,然后上传了一个名为UNIQUE_PART_PATTERN_1的文件,我需要与上面描述的相同,但不仅要检查文件夹中是否有2个文件,还要检查UNIQUE_PART_PATTERN_1和UNIQUE_PART_PATTERN_2是否都存在,然后开始处理,如果没有模式2或模式1超过特定超时的文件,那么我应该开始处理。这些模式相似还是完全独立?使用来自(“file:inputFolder”?fileName=“myFileName.txt”)的
,并使用您可以筛选的。这并不能解决问题,必须先给出两个文件,才能触发路由启动。@Meters唯一的部分只有两个文件是相同的,这两个文件之间的区别是PATTERN_1和PATTERN_2。我想要这样的东西:when(filename.conains(“PATTERN_1”)。然后检查是否有一个文件具有相同的唯一名称但具有不同的模式(PATTERN_2),如果是,则启动进程,如果没有启动等待特定超时。超时后,启动进程仅处理一个文件,如果文件包含模式,则反之亦然。难道让路由由两个文件中的一个触发还不够吗?如果第二个文件尚不存在,请稍后再次检查(这可使用参数
delay
配置)如果两个文件都可用,则继续。为了检查第二个文件是否存在,我不会调用
from(“file:…”)
,而只是用普通java读取它。听起来您想在聚合器中自定义相关表达式。而不是
常量(true)
表达式的实现传递到那里,该表达式将基于
CamelFileName
头返回
UNIQUE\u PART
private final Expression CORRELATION_EXPRESSION = new Expression() {
    @Override
    public <T> T evaluate(Exchange exchange, Class<T> type) {
        final String fileName = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);
        final String correlationExpression = fileName.substring(0, fileName.indexOf('_'));
        return exchange.getContext().getTypeConverter().convertTo(
                type,
                correlationExpression
        );
    }
};
from("file:inputDirectory")
    .aggregate(CORRELATION_EXPRESSION, AggregationStrategies.groupedExchange())
    ...