我正在尝试使用Camel开发文件接收过程 . 我想做的事似乎很简单:
-
收到一个文件
-
调用一个Web服务,该服务将查看该文件并生成一些元数据
-
根据该元数据将文件移动到新位置
-
调用后续进程,该进程将作用于其新位置的文件
我尝试了几种不同的方法,但似乎没有一种方法可以完全按照我的意愿工作 . 我的主要问题是,由于文件在路由完成之前未被移动/重命名,因此我无法向任何下游进程发出信号,表明该文件在该路由中可用 .
我需要调用webservices以确定新的名称和位置,一旦我这样做,正文被更改,我不能使用文件生成器从路径中移动文件 .
我真的很感激听到任何其他解决方案 .
2 回答
您可以发信号通知处理路由,然后使用文件组件的doneFile功能进行轮询 .
您的第一个进程将复制文件,发出处理路径信号,完成复制文件后,它将写入一个完成文件 . 写完文件后,处理路径中的文件使用者将获取您要处理的文件 . 这可以保证在处理文件之前写入文件 .
查看文件组件的“使用完成文件”部分 .
http://camel.apache.org/file2.html
使用其他组件,您可以使用OnCompletion DSL语法触发路由后消息以进行进一步处理 .
但是,对于文件组件,这实际上并不可行,因为移动/完成事件与“OnCompletion”触发器并行发生,并且您无法确定该文件是否真的完成 .
您可能会对Unit of Work API有一些好运,它可以注册路由后执行逻辑(这是文件组件在路由完成时触发移动的方式) .
但是,你真的需要这种逻辑吗?我看到你可能想要向某个文件使用者发送一个唤醒调用,但该文件真的必须准备好非常毫秒吗?一旦收到触发消息,你不能只是开始轮询文件并 grab 它一旦准备好吗?这通常是你如何使用基于文件的协议(或者只是忽略触发器和轮询一次) .