Apache骆驼使用seda

时间:2013-03-06 10:50:27

标签: asynchronous apache-camel

我希望有这样的行为: Camel从目录中读取文件,将其拆分为块(使用流),将每个块发送到seda队列以进行并发处理,并在处理完成后调用报告生成器。 这是我的骆驼路线:

from("file://c:/mydir?move=.done")
.to("bean:firstBean")
.split(ExpressionBuilder.beanExpression("splitterBean", "split"))
.streaming()
.to("seda:processIt")
.end()
.to("bean:reportGenerator");

from("seda:processIt")
.to("bean:firstProcessingBean")
.to("bean:secondProcessingBean");

当我运行它时,reportGenerator bean与seda处理同时运行。 如何在整个seda处理完成后运行一次?

2 个答案:

答案 0 :(得分:2)

拆分器具有内置并行功能,因此您可以按照以下方式轻松完成此操作:

from("file://c:/mydir?move=.done")
  .to("bean:firstBean")
  .split(ExpressionBuilder.beanExpression("splitterBean", "split"))
  .streaming().parallelProcessing()
    .to("bean:firstProcessingBean")
    .to("bean:secondProcessingBean");
  .end()
  .to("bean:reportGenerator");

您可以在Camel拆分器页面上查看有关并行选项的更多详细信息:http://camel.apache.org/splitter

答案 1 :(得分:1)

我认为你可以在第二条路线上使用Camel的延迟模式来达到目的。

延迟(long),其中参数表示以毫秒为单位的时间。 You can read more abuout this pattern here

例如; from("seda:processIt").delay(2000) .to("bean:firstProcessingBean"); //将此路线延迟2秒

我建议使用 startupOrder 来配置路由的启动。 官方文档提供了有关该主题的详细信息。 Kindly read it here

要点注意 - “具有最低startupOrder的路由首先启动。所有startupOrder定义在CamelContext中的所有路由中必须是唯一的。”

所以,我建议这样的事情 -

from("endpoint1").startupOrder(1)
.to("endpoint2");


from("endpoint2").startupOrder(2)
.to("endpoint3");

希望有所帮助..

PS:我是Apache Camel的新手,也是stackoverflow的新手。请原谅任何可能发生的错误。