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

Apache camel ApacheCamel:我如何向其他进程发出我移动/重命名了文件的信号?,apache-camel,Apache Camel,我正在尝试使用Camel开发一个文件接收流程。我想做的事情似乎很简单: 收到文件 调用一个web服务,它将查看该文件并生成一些元数据 基于该元数据将文件移动到新位置 调用将在文件的新位置对其执行操作的后续进程 我尝试过几种不同的方法,但似乎没有一种完全符合我的要求。我的主要问题是,由于在路由完成之前不会移动/重命名文件,因此我无法向任何下游进程发出信号,表明该文件在该路由中可用 我需要调用webservices来确定新的名称和位置,一旦我这样做了,主体就会被更改,并且我不能使用文件生成器从路

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

  • 收到文件
  • 调用一个web服务,它将查看该文件并生成一些元数据
  • 基于该元数据将文件移动到新位置
  • 调用将在文件的新位置对其执行操作的后续进程
我尝试过几种不同的方法,但似乎没有一种完全符合我的要求。我的主要问题是,由于在路由完成之前不会移动/重命名文件,因此我无法向任何下游进程发出信号,表明该文件在该路由中可用

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


我非常希望听到任何其他解决方案。

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

然而,对于文件组件,这实际上是不可行的,因为move/done事件与“OnCompletion”触发器并行发生,并且您无法确定文件是否真的完成了

您可能很幸运,它可以注册路由后执行逻辑(这就是路由完成时文件组件触发移动的方式)

然而,你真的需要这种逻辑吗?
我知道您可能想向某个文件使用者发送唤醒呼叫,但文件真的必须在毫秒内准备好吗?一旦准备好,一旦收到触发消息,就不能开始轮询文件并抓取它吗?使用基于文件的协议通常就是这样做的(或者只是忽略触发器,偶尔轮询一次)。

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

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

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


谢谢您的回复。我真的不需要那么快触发后续流程(为了解决我面临的问题,我在后续流程中延迟了10秒)。我正在阅读更多的文档,看起来路由滑动模式可能会起作用?第一个端点是收集元数据(确定最终位置)的Web服务,第二个端点是文件的复制?我已经忘记了完成的文件。Poling不适合我,因为我不一定知道确切的文件名,其他进程可能会在同一目录中创建文件。但是,使用doneFile,我可以控制文件名并为此进行轮询。事实上,我已经解决了这个问题,让一个名为复制文件的进程,并允许路由删除它。我认为,尽管这个解决方案也可能奏效。谢谢你们两位的意见。