在Apache Camel中处理大型CSV文件的最佳策略

Tak*_*aka 14 apache-camel

我想开发一个轮询包含CSV文件的目录的路由,并且对于每个文件,它使用Bindy解组每一行并在activemq中对其进行排队.

问题是文件可能非常大(一百万行)所以我更喜欢一次排队一行,但我得到的是Bindy末尾的java.util.ArrayList中的所有行记忆问题.

到目前为止,我有一点测试和解组工作,所以使用注释的Bindy配置是可以的.

这是路线:

from("file://data/inbox?noop=true&maxMessagesPerPoll=1&delay=5000")
  .unmarshal()
  .bindy(BindyType.Csv, "com.ess.myapp.core")           
  .to("jms:rawTraffic");
Run Code Online (Sandbox Code Playgroud)

环境是:Eclipse Indigo,Maven 3.0.3,Camel 2.8.0

谢谢

Cla*_*sen 31

如果您使用Splitter EIP,那么您可以使用流模式,这意味着Camel将逐行处理该文件.

from("file://data/inbox?noop=true&maxMessagesPerPoll=1&delay=5000")
  .split(body().tokenize("\n")).streaming()
    .unmarshal().bindy(BindyType.Csv, "com.ess.myapp.core")           
    .to("jms:rawTraffic");
Run Code Online (Sandbox Code Playgroud)