在camel中将大型文件发送到多播端点时出错

时间:2013-03-19 06:25:01

标签: java apache-camel

我正面临需要向组播端点发送大文件大小的情况。我的路线如下。我正在尝试从abcd端点向xyz发送100 MB或更多文件的单个文件,从xyz发送到efg和测试队列。我能够将整个100MB从abcd发送到xyz,但不能从xyz发送到efg和测试队列。组播路由中只发送少量文件和其他文件丢失。在fuseesb日志中也有3种类型的错误:

1. org.apache.camel.component.file.GenericFileOperationFailedException: Cannot store file: D:\xyz\samplebigfiles.txt at org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:264)[147:org.apache.camel.camel-core:2.10.0.fuse-71-047]

2. Caused by: java.io.FileNotFoundException: D:\abcd\samplebigfiles.txt (The process cannot access the file because it is being used by another process)
    at java.io.FileInputStream.open(Native Method)[:1.6.0_22]

3. java heap space error


<route>
  <from uri="file:///D:/abcd" />
   <to uri="file:///D:/xyz" />
</route>
<route>
  <from uri="file:///D:/xyz" />
    <multicast>
    <to uri="file://D:/efg" />
    <to uri="jms:queue:test" />
    </multicast>
</route>

请建议我解决它的一些解决方案。

1 个答案:

答案 0 :(得分:0)

使用文件时,您需要考虑使用读取锁定策略,以避免读取文件,而另一个进程正在编写文件等。请参阅Camel文档文档中的更多详细信息:http://camel.apache.org/file2 < / p>

并且您不应该通过JMS队列发送100MB文件。消息传递不适用于如此大的有效负载。例如,Apache ActiveMQ在http://activemq.apache.org/can-i-send-really-large-files-over-activemq.html

上有一个常见问题解答

请注意,Apache Camel不支持ActiveMQ提供的特殊BlobMessage类型。虽然这种功能很少使用。它实现了带外存储文件,并使用FTP传输有效负载。

在传输如此大的有效载荷时谈到FTP,使用FTP / SCP或其他方式可能会更好。骆驼有FTP和SCP组件: