Apache camel camel中并发文件写入的数据丢失

Apache camel camel中并发文件写入的数据丢失,apache-camel,Apache Camel,我正在使用camel技术进行文件操作。我的系统是集群环境 Let say, I have 4 instances Instance A Instance B Instance C Instance D 文件夹结构 输入文件夹:C:/app/Input 输出文件夹:C:/app/Output 所有四个实例都将指向输入文件夹位置。根据,my business 8文件将放在输入文件夹中,输出将合并为文件。在这里,并发写入输出文件时会丢失数据 路线: from("file://C:/ap

我正在使用camel技术进行文件操作。我的系统是集群环境

Let say,  I have 4 instances  
Instance A 
Instance B 
Instance C 
Instance D
文件夹结构

输入文件夹:C:/app/Input

输出文件夹:C:/app/Output

所有四个实例都将指向输入文件夹位置。根据,my business 8文件将放在输入文件夹中,输出将合并为文件。在这里,并发写入输出文件时会丢失数据

路线:

 from("file://C:/app/input")
 .setHeader(Exchange.File_Name,simple("output.txt"))
 .to("file://C:/app/output?fileExist=Append")
 .end();

请帮我解决这个问题。有什么东西像骆驼写锁一样吗?避免并发文件编写器。提前感谢

您可以使用文件组件的doneFile选项,有关详细信息,请参阅

避免读取其他应用程序当前正在编写的文件


注意,JDK文件IO API在检测另一个应用程序当前是否正在写入/复制文件方面有点受限。根据操作系统平台的不同,实现也可能有所不同。这可能会导致Camel认为文件未被另一个进程锁定并开始使用它。因此,你必须自己调查什么适合你的环境。为了帮助您使用此Camel,您可以使用不同的readLock选项和doneFileName选项。另请参阅“从其他人直接放置文件的文件夹中使用文件”一节。

据我所知,这些输入文件夹应分别位于这些实例中的每个实例中,并且输出文件夹也相同?没有安装输入和输出位置。所有4个实例共享同一位置。据我所知,当我们在该位置放置8个文件时,4个实例中的每一个都将开始处理。因此,文件1将由实例1处理,文件2将由实例2处理,依此类推。当出现这种情况时,每个实例将分别处理文件,并尝试更新相同的文件名,第一个访问该文件的实例将锁定该文件。这会导致另一个实例出错,只是不更新文件。我说的对吗?我不确定骆驼在写文件时是否使用了锁。我是骆驼队的新手。但每次我都会得到不同数量的记录。假设每个文件有1000条记录,那么最终输出文件中的实际输出为8000条。但是每次运行都会得到不同的输出计数。在这种情况下,最好使用aggregator2组件,因为您从一个目录中读取多个文件并创建一个文件输出。为此使用聚合和completionPredicate。参考: