【发布时间】:2021-03-02 06:23:39
【问题描述】:
我一直在使用 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中的文件,这与我想要的相反;它表现为生产者而不是消费者。
是否有任何可能的方法来实现我正在尝试做的事情,或者它与 Camel 的用途有冲突吗?
【问题讨论】:
-
为什么你不能在 first from 之后添加一个 bean 处理器,然后提取文件名并将其作为属性添加到 body 并发送回来
-
不确定我是否理解,“寄回”给谁?骆驼路线?那么问题也是一样的,怎么从ftp消费
-
查看 Content Enricher EIP 和 pollEnrich
-
我会查看 SEDA 队列。使用多消费者模式很容易。读取 a 中的文件,将其发送到 a 中的 seda,然后在 SEDA 中处理文件,
-
@ClausIbsen 感谢您的帮助!我能够使其与内容丰富器一起使用,这正是我正在寻找但不知道名称的东西。如果其他人有同样的问题,我会将最终解决方案作为单独的答案发布。
标签: ftp apache-camel