[英]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.