首页 文章

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

提问于
浏览
2

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

  • 收到一个文件

  • 调用一个Web服务,该服务将查看该文件并生成一些元数据

  • 根据该元数据将文件移动到新位置

  • 调用后续进程,该进程将作用于其新位置的文件

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

我需要调用webservices以确定新的名称和位置,一旦我这样做,正文被更改,我不能使用文件生成器从路径中移动文件 .

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

2 回答

  • 0

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

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

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

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

  • 1

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

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

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

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

相关问题