gpt4 book ai didi

java - Apache Camel,将文件移动到 .camel 的重新排序器

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:25 24 4
gpt4 key购买 nike

我正在尝试重新排序在 Apache Camel 之上编写的应用程序摄取文件的顺序。文件需要按设定的顺序进行处理,如果应用程序没有按顺序获取文件,则文件中数据的各种聚合和其他处理将失败。为了保护应用程序,我尝试使用重排序器 EIP 来确保文件按顺序处理。然而,我发现重排序器似乎导致文件在下游组件传递交换之前被移动到 .camel 目录中。

我写了一个简单的例子来说明这个问题:

import java.io.File;
import java.io.IOException;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

public class CamelFileResequencerTest extends CamelTestSupport {

@Test
public void test() throws IOException, InterruptedException {
File file1 = new File("target/input/1.txt");
FileUtils.write(file1, "Hello Camel");
FileUtils.write(new File("target/input/2.txt"), "Hello Camel");
FileUtils.write(new File("target/input/3.txt"), "Hello Camel");
Thread.sleep(100l);
assertTrue(file1.exists());
FileUtils.write(new File("target/input/4.txt"), "Hello Camel");
FileUtils.write(new File("target/input/5.txt"), "Hello Camel");
Thread.sleep(5000l);
assertTrue(new File("target/output/1.txt").exists());
}

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {

@Override
public void configure() throws Exception {
from("file://target/input")
.resequence(header(Exchange.FILE_NAME_ONLY)).batch().size(3)
.to("file://target/output/");
}
};
}
}

当尝试写入输出文件时,测试会抛出异常,因为输入文件不再位于输入目录中,而是已移至/target/input/.camel 目录。

现在我可以通过在重新排序器之后添加处理 bean 来解决这个问题,以将文件路径更改为 .camel 目录中的路径,但这对我来说似乎有点困惑。另一种选择是对文件名而不是文件进行重新排序(即消息正文是字符串形式的文件名,而不是通用文件)。

有人在文件上使用过重排序器并可以提供建议吗?

最佳答案

要阻止文件移动到 .camel,您可以在路由构建器的配置方法中将 noop 参数添加到文件使用者。您可以阅读此内容here if using Camel 1.xhere if using Camel 2.0 onwards

from("file://target/input?noop=true")

文件被移动到 .camel 目录的原因与重新排序器无关,而是与 Camel 中的实际文件生成器有关,如文档中所述:

默认情况下,Camel 会将使用的文件移动到相对于文件使用位置的子文件夹 .camel。

此后将跳过这些文件,因为 Camel 会忽略任何以点开头的文件。

希望这有帮助。

关于java - Apache Camel,将文件移动到 .camel 的重新排序器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com