【问题标题】:Apache Camel multiple consumersApache Camel 多个消费者
【发布时间】: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


【解决方案1】:

感谢comment from 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.");

【讨论】:

    【解决方案2】:

    这样的事情怎么样?

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

    【讨论】:

    • 这基本上是同样的问题,我正在将文件名提取到另一个交换消息中,但 ftp 一直表现为生产者,正在写入文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多