1

如何根据错误将 FTP 路由中的文件移动到不同的目录?

from("sftp://XXX@safsdf.de/dir/?delay=2s&move=done&moveFailed=failImport")
        .split()
        .body()
        .process(e -> {
            String fileName = (String) e.getIn().getHeader(Exchange.FILE_NAME);
             // do some magic which could throw a exception
        })
        .log("Imported file ${file:name} completely.");
4

2 回答 2

0

它可以使用 onException、try-catch-finally 或自定义文件处理策略进行归档,但它们都不是很方便。

我想出了这个简单的代码:

@Override
public void configure() throws Exception {
    errorHandler(loggingErrorHandler(logger));
    from("sftp://XXX@safsdf.de/dir/?delay=2s&move=${in.header.outDirectory}&moveFailed=failImport")
            .process(exchange -> exchange.setProperty(originalMessage, exchange.getIn()))
            .split()
            .body()
            .process(e -> {
                String fileName = (String) e.getIn().getHeader(Exchange.FILE_NAME);
                Message origMsg = (Message) e.getProperty(originalMessage);
                try {
                    // do what ever
                    origMsg.setHeader(outDirectory, "done/" + fileName);
                } catch (KaboomException ex) {
                    origMsg.setHeader(outDirectory, "retry/" + fileName);
                }
            })
            .log("Imported file ${file:name} completely.");

}

在原始消息上设置标题很重要。

于 2017-06-23T08:48:45.340 回答
0

查看 Camel 中的 onException 处理程序。它允许您捕获特定的异常,然后进行相应的路由。如果您希望错误处理更符合您的 Camel 路线,还有类似 try-catch 的语法。

onException(BadThingHappenedException.class).to(file:///errorFolder)

文档:

异常

试着抓住最后

自定义文件处理策略

于 2017-06-19T15:09:04.720 回答