Asynchronous 使用seda的apachecamel

Asynchronous 使用seda的apachecamel,asynchronous,apache-camel,Asynchronous,Apache Camel,我想有这样的行为: Camel从目录中读取文件,将其拆分为块(使用流),将每个块发送到seda队列以进行并发处理,处理完成后,将调用报告生成器。 这是我的骆驼路线: from("file://c:/mydir?move=.done") .to("bean:firstBean") .split(ExpressionBuilder.beanExpression("splitterBean", "split")) .streaming() .to("seda:processIt") .end() .t

我想有这样的行为: 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");
当我运行它时,ReportGeneratorbean与seda处理并发运行。
如何在整个seda处理完成后使其运行一次?

我认为您可以使用第二条路线上骆驼的延迟器模式来实现此目的

延迟(long),其中参数以毫秒为单位指示时间

对于eg<代码>来自(“seda:processIt”)。延迟(2000) .to(“bean:firstProcessingBean”)//此路由延迟2秒

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

注意事项-“具有最低startupOrder的路由首先启动。定义的所有startupOrder在您的上下文中的所有路由中必须是唯一的。”

所以,我建议这样做-

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


from("endpoint2").startupOrder(2)
.to("endpoint3");
希望对你有帮助


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

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

延迟(long),其中参数以毫秒为单位指示时间

对于eg<代码>来自(“seda:processIt”)。延迟(2000) .to(“bean:firstProcessingBean”)//此路由延迟2秒

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

注意事项-“具有最低startupOrder的路由首先启动。定义的所有startupOrder在您的上下文中的所有路由中必须是唯一的。”

所以,我建议这样做-

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


from("endpoint2").startupOrder(2)
.to("endpoint3");
希望对你有帮助


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

拆分器具有内置并行功能,因此您可以通过以下方式更轻松地执行此操作:

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 splitter页面上看到关于parallel选项的更多详细信息:

该拆分器具有内置的parallel,因此您可以通过以下方式更轻松地执行此操作:

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 splitter页面上看到关于parallel选项的更多详细信息:

我不能使用delay,因为我不知道seda处理需要多长时间。在这里指定启动顺序也不起作用,因为第二条路线(from(“seda:…)是由第一条路线启动的。克劳斯的解决方案在您的情况下运行良好。:)这种同步通常是在使用驼峰路线时出现的,即使是我也在学习更多的技术。到目前为止,我更多地使用直接组件作为同步触发器。我不能使用延迟,因为我不知道seda处理需要多长时间。指定启动顺序在这里也不起作用,因为seco第二条路线(from(“seda:…”)是从第一条路线开始的。克劳斯的解决方案在您的案例中效果很好。:)这种同步经常在使用驼峰路线时出现,甚至我还在学习更多的技术。到目前为止,我更多地使用直接组件作为同步触发器。这很好,但是有没有办法使用seda组件来实现相同的结果?这很好,但是有没有办法使用seda组件来实现相同的结果?