当前位置: 首页 > 知识库问答 >
问题:

带有doneFileName的Apache骆驼文件

丌官向荣
2023-03-14

我刚刚开始研究apache camel(使用蓝图路线),我已经被卡住了。

我需要处理一组不同格式的csv文件。我有5个文件,foo_X_X指定csv文件的类型,文件有日期戳。这些文件可能很大,所以一旦写入所有文件,就会写入一个“完成”文件。完成的文件名为foo_trigger_20160110.csv.

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

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

你知道骆驼怎么做吗?

有什么好的骆驼书的建议吗?

共有1个答案

易书
2023-03-14

以下是文档中的一个示例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}");
 类似资料:
  • 我是第一次使用Camel。我的试验项目是编写一个应用程序,该应用程序接收HTTP GET请求(使用Jetty)并通过Thrift将请求传递到另一台服务器。然后将收到的答案传递回客户端。(即,如果您愿意,我正在编写超文本传输协议-get请求和Thrift支持的服务器之间的数据交换机或中间件应用程序。) 我有一个完美的非驼峰版本,现在我正在尝试将驼峰等效物组合在一起。目前,我只想将jetty请求写入一

  • 我试图得到一个代理工作与蓝图在OSGi(正在通过Karaf)正确,并通过Gradle构建。 我的蓝图文件(名字已经改变,以保护无辜): 我对此感到非常困惑,因为它在抱怨Camel上下文中的标记。我在其他地方使用了完全相同的语法(只是一个不同的包),没有问题。 最后一个“错误”是: RuntimeException:放弃等待服务(ObjectClass=org.apache.camel.CamelC

  • 我创建了一个路由器类,并在@Configuration中标记为@Bean。有一件事我不太确定,那就是camel会多久调用一次数据库以获取select结果?一旦我在数据库中有了一个新条目,camel就会检索并处理它。

  • 我如何使用中的的反向功能。如果在uri中设置了,组件将等待某个文件出现以便处理。我需要检查文件是否存在,然后什么也不做,否则将处理文件

  • 问题可能也与我对这个概念的理解有关。 正在调用代理bean,它是。代理bean接口是使用类实现的。所以我期待返回的通过传递,然后在控制台上流式传输。 Application Context 会计界面 会计Util 动作课 但是我有例外: 还有一个问题,我可以为单个提供多个 我希望使用不同的方法调用不同的,但只是单个接口的一部分。

  • 我正在尝试重新排序在Apache Camel之上编写的应用程序摄取文件的顺序。文件需要按设定的顺序处理,如果应用程序没有按顺序处理文件,则文件中数据的各种聚合和其他处理将失败。为了保护应用程序,我尝试使用重新排序器EIP来确保文件按顺序处理。但是我发现重新排序器似乎会导致文件在下游组件通过交换之前被移动到. camel目录中。 我写了一个简单的例子来说明这个问题: 当测试尝试写入输出文件时,会引发