配置camel路由出现异常时文件的重新传递

mspsb9vt  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(145)

我有一个非常简单的方法,从一个目录中获取文件并将其发送到一个bean:
onException().redeliveryDelay(10000);
在MyProcessor.class中可能会发生异常,因此我想再次延迟处理该文件。
onException().redeliveryDelay(10000);
但是它没有工作,并且在异常之后,同一个文件将被再次处理。

cetgtptt

cetgtptt1#

处理前是否执行了onException()
示例:

errorHandler(defaultErrorHandler()
        .maximumRedeliveries(2)
        .redeliveryDelay(5000)
        .retryAttemptedLogLevel(LoggingLevel.WARN));

// exception handler for specific exceptions
onException(IOException.class).maximumRedeliveries(1).redeliveryDelay(5000);

//only the failed record send write to error folder
onException(CsvRecordException.class)
        .to("file:/app/dev/dataland/error");

onCompletion()
        .log("global thread: ${threadName}")
        .to("file:/app/dev/dataland/archive");

from("file:/path?noop=true?delay=3000")
        .startupOrder(1)
        .log("start to process file: ${header.CamelFileName}")
        .bean(CsvFilePreLoadChecker.class, "validateMetaData")
        .end()
        .log("Done processing file: ${header.CamelFileName}");
xmd2e60i

xmd2e60i2#

MyProcessor.class中发生错误时,路由处理失败,因此文件消费者不删除文件
由于路由处理已完成,文件消费者只需再次读取(仍然存在的)文件
如果您想要将有行程错误的档案移走,您可以使用file consumermoveFailed选项。然后您必须定期将它们移回来重试。
如果你想将文件阅读和MyProcessor.class分离,你需要将路由分成2个路由。一个路由读取文件并将其消息发送到队列或类似的队列。另一个路由使用该队列并处理消息。

相关问题