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