有没有一种方法可以通过检测ACK文件来处理文件

时间:2020-06-22 06:37:39

标签: spring apache-camel spring-camel

我有一个应用程序,并且定期将文件放入一个文件夹中。 总是有两个文件,一个文件名为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选项找到解决方案

1 个答案:

答案 0 :(得分:1)

您自己发现,骆驼可以使用doneFileName选项自动处理。

您根本不需要处理ACK文件。

但是结果是:如果缺少ACK文件,则不会处理该数据文件,因为Camel会将没有完成文件的数据文件视为仍在传输/写入过程中。