在 Apache Camel 中窃听时如何检查文件是否存在
How to check whether file exists while wiretapping in Apache Camel
我有一个用 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 属性 和 Custom File Strategy 的东西,我认为我可以使用(我在这里可能是错的)。但是我不确定它到底是如何工作的。
所以我的问题是:
- 真的有可能实现我想要实现的目标吗?
- 如果是,那么有人可以告诉我怎么做吗?
可能有几种方法可以做到这一点。其中之一是使用处理器,该处理器使用动态 属性:
计算文件名
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");
我有一个用 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 属性 和 Custom File Strategy 的东西,我认为我可以使用(我在这里可能是错的)。但是我不确定它到底是如何工作的。
所以我的问题是:
- 真的有可能实现我想要实现的目标吗?
- 如果是,那么有人可以告诉我怎么做吗?
可能有几种方法可以做到这一点。其中之一是使用处理器,该处理器使用动态 属性:
计算文件名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");