0

我刚开始看 apache camel(使用蓝图路由),我已经卡住了。

我需要处理一组不同格式的 csv 文件。我得到 5 个带有 foo_X_20160110.csv 的文件,其中 X 指定了 csv 文件的类型并且这些文件有一个日期戳。这些文件可能非常大,因此一旦写入所有文件,就会写入“完成”文件。完成的文件名为 foo_trigger_20160110.csv。

我已经在文件上看到了 doneFileName 选项,但它只支持静态名称(我在文件名中有一个日期),或者它期望每个输入文件都有一个完成的文件。

这些文件必须以固定顺序进行,但不能保证它们以何种顺序写入输入目录。因此我需要等待完成的文件。

知道如何使用 Camel 完成此操作吗?

有什么好的骆驼书推荐吗?

4

1 回答 1

2

这是文档 http://camel.apache.org/file2.html中的一个示例

from("file:C:/temp/input.txt?doneFileName=done");

如您所见,doneFileName 有一个静态值“done”。但是您可以使用标准 java 编写动态名称,即当前日期格式或其他任何内容,只需使用字符串操作来构造 URI。希望有帮助。

更新:

顺便说一句,如文档中所述,doneFileName 可以选择动态占位符。

然而,更常见的是每个目标文件都有一个完成的文件。这意味着存在 1:1 的相关性。为此,您必须在 doneFileName 选项中使用动态占位符。目前 Camel 支持以下两种动态标记:file:name 和 file:name.noext,它们必须包含在 ${ } 中。消费者仅支持已完成文件名的静态部分作为前缀或后缀(不能同时作为两者)。

from("file:bar?doneFileName=${file:name}.done");

您还可以为完成的文件使用前缀,例如:

from("file:bar?doneFileName=ready-${file:name}");
于 2016-01-28T07:46:53.003 回答