Apache Camel SEDA异常处理

时间:2014-06-01 05:24:56

标签: java apache-camel

使用Apache Camel,我需要对zip文件中包含的XML文件执行XSD验证,除了导致zip文件转移到错误文件夹的任何异常。

以下(简化)路线适用 *

from("file:/my/Path&moveFailed=../error").split(new ZipSplitter()).
    streaming().filter(header(Exchange.FILE_NAME).endsWith(".xml")).
        bean(MyCustomValidator.class).to("validator:schemas/my/schema.xsd").end();

为了提高效率,我已将其调整为使用SEDA进行拉链内容检查:

from("file:/my/Path&moveFailed=../error").split(new ZipSplitter()).
    streaming().filter(header(Exchange.FILE_NAME).endsWith(".xml")).
        to("seda:validateEvents");

from("seda:validateEvents?concurrentConsumers=20").bean(MyValidator.class).
    to("validator:schemas/my/schema.xsd").end();

但是,现在moveFailed参数不受文件组件的尊重。如果我添加显式onException()并尝试将文件复制到错误文件夹中,则任何XSD验证失败都会将XML文件(而不是zip文件)复制到错误文件夹中。

如何在维护端点的错误处理的同时执行组件的并行处理?

* 我已经为zip文件内容使用了显式文件名过滤器,否则拆分器会对zip中的每个XML文件执行一次bean验证器,再次 为zip文件本身(?!)。

1 个答案:

答案 0 :(得分:0)

请参阅

上的shareUnitOfWork选项

并且在使用SEDA时你可以在分离器中使用并行处理。