Apache Camel:我如何向移动/重命名文件的其他进程发信号?

时间:2012-10-05 21:03:59

标签: apache-camel

我正在尝试使用Camel开发文件接收过程。我想做的事似乎很简单:

  • 收到文件
  • 调用将查看该文件并生成一些元数据的Web服务
  • 根据该元数据将文件移至新位置
  • 调用后续进程,该进程将作用于其新位置的文件

我尝试了几种不同的方法,但似乎没有一种方法可以完全按照我的意愿运作。我的主要问题是,由于文件在路由完成之前未被移动/重命名,因此我无法向任何下游进程发出信号,表明该文件在该路由中可用。

我需要调用webservices来确定新的名称和位置,一旦我这样做,主体就会被更改,我无法使用文件生成器从路径中移动文件。

我真的很感激听到任何其他解决方案。

2 个答案:

答案 0 :(得分:1)

您可以发信号通知处理路由,然后使用文件组件的doneFile功能进行轮询。

您的第一个进程将复制文件,发出处理路径信号,完成复制文件后,它将写入一个完成文件。写完文件后,处理路径中的文件使用者将获取您要处理的文件。这可以保证在处理文件之前写入文件。

查看文件组件的“使用完成文件”部分。

http://camel.apache.org/file2.html

答案 1 :(得分:0)

使用其他组件,您可以使用OnCompletion DSL语法触发路由后消息以进行进一步处理。

然而,对于文件组件,这实际上并不可行,因为移动/完成的事情与“OnCompletion”触发器并行发生,并且您无法确定该文件是否已完成。

你可能会对Unit of Work API有一些好运,它可以注册路由后执行逻辑(这就是当路由完成时File组件触发移动的方式)。

但是,你真的需要这个逻辑吗? 我看到你可能想要向一些文件使用者发送一个唤醒调用,但该文件真的必须准备好非常毫秒吗?一旦收到触发消息,你不能只是开始轮询文件并抓住它一旦准备好吗?通常情况下,你是如何使用基于文件的协议进行操作的(或者只是忽略触发器和轮询一次)。