将Apache Camel CSV与拆分器模式相结合

时间:2016-09-23 09:32:12

标签: java csv apache-camel splitter

我有一个大型CSV文件,我希望以速率限制进行处理。 Splitter Pattern提供了我正在寻找的内容,但我无法弄清楚如何将其与CSV Component结合起来。

从拆分器文档中,您可以处理CSV,如:

from("file:inbox")
    .unmarshal().csv().split()
    .streaming().parallelProcessing()
    .throttle(requestsPerSecond)
    .bean(new ValidateProcess(), "validate")
    .marshal().csv().to("file:outbox");

但理想情况下,我想利用Apache Camel CSV组件处理mash做更多的事情:

{{1}}

我知道上面的代码是完全错误的,但希望它传达了我想要实现的目标。这完全可行吗?

1 个答案:

答案 0 :(得分:0)

因此,出于某种原因,我无法在早些时候解决这个问题,我认为我的类路径问题没有取消对org.apache.camel:camel-csv的依赖。一旦我整理出来,一切都很好。

这是我最终的结果:

final CsvDataFormat csv = new CsvDataFormat(";");
csv.setLazyLoad(true);
csv.setSkipFirstLine(true);

from(in).unmarshal(csv).split(body()).streaming().parallelProcessing()
                    .bean(validator, "validateNumber")
                    .filter(header(ValidateProcess.Valid).isEqualTo(true))
                    .throttle(tps).bean(validator, "validate")
                    .marshal().csv()
                    .to(out).log("done.").end();

基本上,我想要对包含CSV的{​​{1}}数据进行流处理,速率限制在50 TPS,并将结果输出到csv文件。