如何在使用ProducerTemplate后在Camel中定义聚合器?

时间:2012-11-17 17:55:17

标签: csv split apache-camel

我有一个处理csv文件的路由,并将它们作为记录插入到数据库中。由于它是一个巨大的csv文件而且Camel csv-splitter内存不足,我们不得不编写自己的分配器。我使用ProducerTemplate编写了拆分器。

处理csv的路线看起来有点像这样:

<route id="processCsvRoute">
    <from ref="inbox" />
    <to uri="bean:csvBean?method=process"/>
</route>

在csvBean中,我们进行拆分,最后为每个csv-line执行以下java代码(csv行导致产品对象)。

producer.sendBodyAndHeader("direct:csvAggregator", product, "ID", csv.getFilename());

没有csvAggregator-route选择csv:

<route id="csvAggregator">
<from uri="direct:csvAggregator" />
<aggregate strategyRef="exchangeAggregatorStrategy"
               completionSize="10000"
               completionInterval="10000"
               parallelProcessing="true">
        <correlationExpression>
            <header>ID</header>
        </correlationExpression>
        <to uri="bean:batchInsertBean"/>
    </aggregate>
</route>

有没有办法在processCsvRoute中定义聚合器?我的解决方案正在运行,但感觉不对我必须为它创建一个单独的路由。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你可以在分割器上启用流模式,然后它“逐行”读取CSV文件,你就不会耗尽内存。

文档包含更多详细信息:http://camel.apache.org/splitter

<split streaming="true" ...>