有没有办法通过检测ACK文件来处理文件
Is there a way to process file by detecting ACK files
我有一个应用程序,文件会定期进入一个文件夹。
总是有两个文件过来,一个名为ACK+文件名,为空,另一个只是文件名(这个是数据文件)。
我从一些人那里听说,Camel 中有一种方法可以通过检测 ACK 来处理我的文件。
我目前正在做的是检测ACK文件,然后触发一个进程,该进程将获取数据文件并进行处理。但是有了这个我就不能对我的代码进行工作单元测试了。
但如果可能的话,我更希望有一条路由可以检测到我的 ACK,但会使用数据文件触发进程。
这可能吗?
这是我的实际路线:
@Component
public class MyRoute extends RouteBuilder {
public static final String ROUTE_NAME = "myRoute";
private final Processor myProcessor;
@Autowired
public MyRoute(@Qualifier("my.processor") Processor myProcessor) {
this.myProcessor= myProcessor;
}
@Override
public void configure() throws Exception {
from("file://{{data.input.dir}}?moveFailed=errors&delete=true&include=ACK.*").routeId(ROUTE_NAME)
.choice()
.when(header("CamelFileName").startsWith("ACK"))
.process(myProcessor)
.end();
}
}
编辑:
使用 doneFileName
选项找到解决方案
正如您自己发现的那样,Camel 可以使用 doneFileName
选项自动处理此问题。
您根本不必处理 ACK 文件。
但结果是:如果缺少 ACK 文件,则不会处理数据文件,因为 Camel 将没有完成文件的数据文件视为仍在处理中 transfer/writing。
我有一个应用程序,文件会定期进入一个文件夹。 总是有两个文件过来,一个名为ACK+文件名,为空,另一个只是文件名(这个是数据文件)。
我从一些人那里听说,Camel 中有一种方法可以通过检测 ACK 来处理我的文件。
我目前正在做的是检测ACK文件,然后触发一个进程,该进程将获取数据文件并进行处理。但是有了这个我就不能对我的代码进行工作单元测试了。
但如果可能的话,我更希望有一条路由可以检测到我的 ACK,但会使用数据文件触发进程。
这可能吗?
这是我的实际路线:
@Component
public class MyRoute extends RouteBuilder {
public static final String ROUTE_NAME = "myRoute";
private final Processor myProcessor;
@Autowired
public MyRoute(@Qualifier("my.processor") Processor myProcessor) {
this.myProcessor= myProcessor;
}
@Override
public void configure() throws Exception {
from("file://{{data.input.dir}}?moveFailed=errors&delete=true&include=ACK.*").routeId(ROUTE_NAME)
.choice()
.when(header("CamelFileName").startsWith("ACK"))
.process(myProcessor)
.end();
}
}
编辑:
使用 doneFileName
选项找到解决方案
正如您自己发现的那样,Camel 可以使用 doneFileName
选项自动处理此问题。
您根本不必处理 ACK 文件。
但结果是:如果缺少 ACK 文件,则不会处理数据文件,因为 Camel 将没有完成文件的数据文件视为仍在处理中 transfer/writing。