2

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

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

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

我需要调用 web 服务来确定新的名称和位置,一旦我这样做了,主体就会改变,我不能使用文件生产者从路径中移动文件。

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

4

2 回答 2

1

您可以向处理路由发出信号,然后使用文件组件的 doneFile 功能让它们轮询。

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

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

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

于 2012-10-08T16:15:46.623 回答
0

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

但是,对于文件组件,这并不是真正可行的,因为移动/完成的事情与“OnCompletion”触发器并行发生,并且您不能确定文件是否真的完成了。

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

但是,你真的需要这个逻辑吗?我看到您可能想向某个文件使用者发送唤醒呼叫,但是文件真的必须准备好毫秒吗?收到触发消息后,您就不能开始轮询文件并在准备好后抓取它吗?这通常是您使用基于文件的协议执行操作的方式(或者只是不时地忽略触发器并轮询一次)。

于 2012-10-06T10:01:40.170 回答