【发布时间】:2015-06-01 17:16:16
【问题描述】:
我正在使用骆驼技术进行文件操作。我的系统是集群环境。
Let say, I have 4 instances
Instance A
Instance B
Instance C
Instance D
文件夹结构
输入文件夹:C:/app/input
输出文件夹:C:/app/output
所有四个实例都将指向输入文件夹位置。根据,我的业务 8 个文件将放在输入文件夹中,输出将被合并文件。这里骆驼在同时写入输出文件时丢失数据。
路线:
from("file://C:/app/input")
.setHeader(Exchange.File_Name,simple("output.txt"))
.to("file://C:/app/output?fileExist=Append")
.end();
请帮我解决这个问题。有没有像骆驼写锁这样的东西?以避免并发文件编写器。提前致谢
【问题讨论】:
-
据我了解,这些输入文件夹应该分别位于每个实例中,输出文件夹也相同?
-
没有输入输出是挂载位置。所有 4 个实例共享同一个位置。
-
据我了解,当我们在该位置放置 8 个文件时,4 个实例中的每一个都将开始处理。因此,文件 1 将由实例 1 处理,文件 2 将由实例 2 处理,依此类推。在这种情况下,每个实例将单独处理文件并尝试更新相同的文件名,并且第一个访问锁定它。这会导致另一个实例出错,只是不更新文件。我说的对吗?
-
我不确定骆驼在写入文件时是否使用锁。我是骆驼的新手。但每次我得到不同的记录数。假设每个文件有 1000 条记录,那么最终输出文件中的实际输出为 8000。但每次运行我得到不同的输出计数。
-
在这种情况下,最好使用 aggregator2 组件,因为您正在从一个目录中读取多个文件并创建一个文件输出。为此使用聚合和完成谓词。参考:stackoverflow.com/questions/28339303/…
标签: apache-camel