Ftp apachecamel多消费者

Ftp apachecamel多消费者,ftp,apache-camel,Ftp,Apache Camel,我使用ApacheCamel已经有一段时间了,并且做了一些基本的工作,但是现在我正在尝试创建一个路由,在这个路由中我可以有多个“使用者”到同一个路由,或者在路由中添加一个使用者,然后处理消息 我的想法是让事件驱动的消费者由事件触发,然后从ftp读取文件。我打算做这样的事情: from("direct:processFile") .from("ftp://localhost:21/folder?fileName=${body.fileName}") //

我使用ApacheCamel已经有一段时间了,并且做了一些基本的工作,但是现在我正在尝试创建一个路由,在这个路由中我可以有多个“使用者”到同一个路由,或者在路由中添加一个使用者,然后处理消息

我的想法是让事件驱动的消费者由事件触发,然后从ftp读取文件。我打算做这样的事情:

from("direct:processFile")
  .from("ftp://localhost:21/folder?fileName=${body.fileName}") // etc.
  .log("Start downloading file ${file:name}.")
  .unmarshal().bindy(BindyType.Csv, MyFile.class)
  .to("bean:fileProcessor")
  .log("Downloaded file ${file:name} complete.");
因此,我的想法是,我有一个事件(例如,直接事件或来自消息队列的事件)具有“fileName”属性,然后使用该属性从ftp下载/使用具有该名称的文件

我相信问题是在同一个路由中有from()。from(),但问题是如果我将ftp组件留在“to”中,那么我的队列事件将写入ftp中的一个文件,这与我想要的相反;它表现为产品而不是消费者


有没有任何可能的方法来实现我想做的事情,或者它与Camel的目的有冲突?

像这样的事情怎么样

  .from("direct:processFile")
  .transform(simple("${body.fileName}"))
  .from("ftp://localhost:21/folder?fileName=${body.fileName}") // etc.
  .log("Start downloading file ${file:name}.")
  .unmarshal().bindy(BindyType.Csv, MyFile.class)
  .to("bean:fileProcessor")
  .log("Downloaded file ${file:name} complete.");
幸亏我找到了我要找的东西,我所需要的部件和使它工作的部件就是

以下是对我有效的路线:

from("direct:processFile")
  .pollEnrich().simple("ftp://localhost:21/folder?fileName=${body.fileName}")
  .log("Start downloading file ${file:name}.")
  .unmarshal().bindy(BindyType.Csv, MyFile.class)
  .to("bean:fileProcessor")
  .log("Downloaded file ${file:name} complete.");

为什么你不能在第一个from之后添加一个bean处理器,然后提取文件名并将其作为属性添加到正文中,然后将其发送回呢?不确定我是否理解,“发送回”给谁?去骆驼路线?那么问题是一样的,如何从内容丰富者EIP和pollEnrichI的ftpLook中消费将看SEDA队列。使用多消费者模式很容易。从中读取文件并将其发送到中的seda,然后在seda中处理文件,@ClausIbsen感谢您的帮助!我能够让它与内容丰富器一起工作,这正是我想要的,但不知道它的名字。我会将最终解决方案作为单独的答案发布,以防其他人有相同的问题。这基本上是相同的问题,我正在将文件名提取到另一个exchange邮件中,但ftp一直充当生产者,写入文件