首页 文章

Apache Camel多个消费者

提问于
浏览
0

我已经和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的用途有什么冲突?

谢谢您的帮助!

2 回答

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

    这样的事怎么样?

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

相关问题