我们正在 Quarkus 环境中运行 apache-camel,我们希望在该过程完成后立即删除以“camelLock”结尾的文件。我们只是对“pdf”文件进行一些处理。因此,无需复制到端点。 我们必须对下面的代码进行哪些更改才能在处理后删除锁定文件(xxx.yyy.camelLock)?
from(
file(input).antInclude("*.pdf").readLock("changed"))
.routeId("signaturcheck")
.throttle(8).timePeriodMillis(1000)
.process(checkPdfSignature)
// log message
.log("File handled ${file:name}")
.to("stub:null");
在 Apache Camel 中,您可以通过使用 onCompletion 子句在路由处理完成后执行操作来实现此目的。您可以使用它来删除锁定文件。以下是修改路线的方法:
from("file:" + input + "?antInclude=*.pdf&readLock=changed")
.routeId("signaturcheck")
.throttle(8).timePeriodMillis(1000)
.process(checkPdfSignature)
.onCompletion().onCompleteOnly()
.process(exchange -> {
// Get the original file name
String originalFileName = exchange.getIn().getHeader("CamelFileName", String.class);
// Create the lock file name
String lockFileName = originalFileName + ".camelLock";
// Get the lock file path
String lockFilePath = exchange.getIn().getBody(File.class).getParent() + File.separator + lockFileName;
// Delete the lock file
File lockFile = new File(lockFilePath);
if (lockFile.exists()) {
lockFile.delete();
}
})
.end()
.log("File handled ${file:name}")
.to("stub:null");
在此修改后的路线中:
onCompletion().onCompleteOnly() 子句用于定义仅当路由处理成功完成时才应执行的操作。 onCompletion 内的进程块负责删除与已处理的 PDF 文件关联的锁定文件。 锁定文件名是根据原始文件名和 .camelLock 扩展名构造的。 Exchange.getIn().getHeader("CamelFileName", String.class) 检索原始文件名。 然后使用 lockFile.delete() 删除锁定文件。 通过此修改,PDF 文件处理完成后应删除锁定文件。根据您的项目结构根据需要调整文件路径和名称。