如何在Camel seda队列完成时通知?

时间:2015-06-10 20:59:53

标签: java apache-camel

用例是我有一个包含许多zip个文件的csv文件。然后将每个文件中的每一行发送到seda队列进行处理。我遇到的问题是,我想知道seda队列何时处理了每一行以执行其他工作。我不确定如何处理这个问题。目前,我正在调查使用轮询来测试seda队列何时为空,但如果线路的处理速度快于它们到达时,这可能会产生错误的结果。

代码

我有一个解压缩zip文件的类,并将每个文件作为InputStream读取。然后将文件中的每一行发送给生产者,生产者又被发送到seda队列。

@Component
public class CsvProcessor { 
    @Resource(name = "csvLineProducer")
    ProducerTemplate producer;

    public void process(InputStream flatFileStream) throws IOException {
        if (flatFileStream==null) return;

        try {
            LineIterator it = IOUtils.lineIterator(flatFileStream, "UTF-8");
            while (it.hasNext()) {
                final String recordLine = it.nextLine();
                this.producer.send(new Processor() {
                    public void process(Exchange outExchange) {
                        outExchange.getIn().setBody(recordLine);
                    }
                });
            }
        } finally {
            IOUtils.closeQuietly(flatFileStream);
        }
    }
}

这是驼色配置。

<camelContext xmlns="http://camel.apache.org/schema/spring" trace="true">
    <template id="csvLineProducer" defaultEndpoint="seda:flatRecordStream"/>

    ...

    <route>
        <from uri="seda:flatRecordStream" />
        <bean ref="myProcessor" method="processLine" />
    </route>

    ...

</camelContext>

0 个答案:

没有答案