代码之家  ›  专栏  ›  技术社区  ›  Santiago Alzate

Apache Camel多消费者

  •  2
  • Santiago Alzate  · 技术社区  · 7 年前

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

    因此,我的想法是,我有一个事件(例如,直接或来自消息队列)具有“ 文件名 属性,然后使用该属性从ftp下载/使用具有该名称的文件。

    我认为问题在于 from()。发件人() 在相同的路径中,但问题是如果我将ftp组件留在“to”内,那么我的队列事件将写入ftp中的文件,这与我想要的相反;它表现为产品而不是消费者。

    有没有任何可能的方法来实现我想要做的事情,或者它与Camel的目的相冲突?

    2 回复  |  直到 3 年前
        1
  •  1
  •   Santiago Alzate    7 年前

    多亏了 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
  •  -1
  •   pvpkiran    7 年前

    像这样的怎么样?

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