如何在ApacheCamel中检查窃听时文件是否存在

44u64gxh  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(359)

我有一个用apache camel编写的项目,其中我从一个路由获取消息,并将其发送到另一个路由进行监听:

from("URI").bean(random1)
.wireTap("direct:wiretap")
.recipientList.method(random2, "random2Method");

from("direct:wiretap").routeId("WireTap")
.setProperty("filename", dynamicValueExpression)
.to("file://log-directory-name?fileName=/${date:now:yyyMMdd}/property[filename]")

这段代码的工作非常好,它窃听文件成功。
这里的问题是,如果有另一个文件具有相同的文件名,则此代码将覆盖该文件。我想实现的是检查文件是否已经存在,如果它确实存在,然后重命名当前文件(不是现有的),然后对其进行窃听。
我查看了camel文档,发现有一些类似fileexist=move属性和自定义文件策略的东西,我认为我可能会使用它们(这里我可能错了)。但我不确定它到底是如何工作的。
所以我的问题是:
真的有可能达到我想要达到的目标吗?
如果是的话,有人能告诉我怎么做吗?

ipakzgxi

ipakzgxi1#

可能有几种方法可以做到这一点。其中之一是使用处理器,该处理器使用动态属性计算文件名:

from("direct:wiretap")
    .routeId("WireTap")
    .process(e -> {
        String fileName = (String) e.getProperty("filename");
        if (new File(fileName).exists()) {
            //Compute alternative name
            e.getIn().setHeader("CamelFileName", 
                                fileName + UUID.randomUUID().toString());
        } else {
            e.getIn().setHeader("CamelFileName", fileName);
        }
    })
    .to("file://log-directory-name");

相关问题