繁体   English   中英

Apache Camel 多个消费者

[英]Apache Camel multiple consumers

我已经与 Apache Camel 合作了一段时间并做了一些基本的事情,但现在我正在尝试创建一个路线,在该路线中我可以有多个“消费者”到同一路线,或者向路线添加一个消费者,然后处理消息。

我的想法是有一个由事件触发的事件驱动消费者,然后从 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 中的一个文件中,其中与我想要的相反; 它表现为产品而不是消费者。

有什么可能的方法来实现我正在尝试做的事情,或者它与骆驼的用途有冲突吗?

感谢Claus Ibsen评论,我找到了我想要的东西,我需要的组件是Content Enricher

这是对我有用的路线:

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("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.");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM