0

我想要这样的行为: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 处理完成后如何让它运行一次?

4

2 回答 2

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

于 2013-03-06T18:07:22.477 回答
1

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

delay(long) 其中参数以毫秒为单位指示时间。您可以在此处阅读有关此模式的更多信息

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

我建议使用startupOrder来配置路由的启动。官方文档提供了有关该主题的详细信息。请在这里阅读

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

所以,我建议这样的东西 -

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


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

希望有帮助..

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

于 2013-03-06T15:17:25.207 回答