我希望有这样的行为: 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处理完成后运行一次?
答案 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的新手。请原谅任何可能发生的错误。