如何删除camelLock文件

问题描述 投票:0回答:1

我们正在 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"); 
java apache-camel quarkus
1个回答
0
投票

在 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 文件处理完成后应删除锁定文件。根据您的项目结构根据需要调整文件路径和名称。

© www.soinside.com 2019 - 2024. All rights reserved.