我们要求使用同时运行的多个camel接口实例写入单个文件。 该文件位于Windows共享文件系统上,该系统已使用SMB安装在JBoss服务器上。
我们使用camel文件组件将每个实例的文件作为本地文件写入。 下面是camel context
中的端点URIfile:/fuse/server/location/proc?fileName=abc.csv&fileExist=Append
当从单个实例发生写入时,文件生成没有问题,但是在多个实例的情况下,它以随机行的方式将垃圾字符添加到文件中。
我们使用 JBoss Fuse 6.0.0 ,界面使用 camel 2.10 版本编写。
如何解决这个问题?这是SMB安装的问题还是接口需要处理它。
答案 0 :(得分:0)
我已经看过相关camel组件的源代码(https://github.com/apache/camel/tree/master/camel-core/src/main/java/org/apache/camel/component/file)&没有任何内置支持从多个JVM并发访问单个文件。但是,处理来自单个JVM的并发访问。
我认为您有两个基本选项来满足您的要求:
我的解决方案是使用ActiveMQ。应用程序的每个实例都会将消息发送到单个共享队列。然后,一些其他进程将消耗来自MQ&的消息。把它们写到磁盘上。
使用单个进程消耗所有MQ消息时,不会对文件系统进行并发写入。
更强大的解决方案是在群集中运行ActiveMQ(可能在每个应用程序实例中都有一个节点)。查看“JMSXGroupID”以防止并发消息消息。