使用 camel 将基于异常 class 的文件移动到不同的文件夹
Move files based on exception class to a different folder with camel
如何根据错误将 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.");
查看 Camel 中的 onException 处理程序。它允许您捕获特定的异常,然后进行相应的路由。如果您希望错误处理更符合您的 Camel 路由,也可以使用类似 try-catch 的语法。
onException(BadThingHappenedException.class).to(file:///errorFolder)
文档:
我可以使用 onException、try-catch-finally 或自定义文件处理策略对其进行存档,但 none 它非常方便。
我想到了这个简单的代码:
@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.");
}
在原始邮件上设置 header 很重要。
如何根据错误将 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.");
查看 Camel 中的 onException 处理程序。它允许您捕获特定的异常,然后进行相应的路由。如果您希望错误处理更符合您的 Camel 路由,也可以使用类似 try-catch 的语法。
onException(BadThingHappenedException.class).to(file:///errorFolder)
文档:
我可以使用 onException、try-catch-finally 或自定义文件处理策略对其进行存档,但 none 它非常方便。
我想到了这个简单的代码:
@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.");
}
在原始邮件上设置 header 很重要。