配置任务执行程序,以便在事务下并行处理中间步骤

时间:2014-10-31 15:57:26

标签: spring-integration

SI工作流程从入站通道适配器开始,该适配器在由pollar启动的新事务下运行。 适配器触发数据处理流程,其中哪种风扇输出,例如适配器轮询数据库并获得几行,拆分和下一个适配器使另一个db调用(因此对于每一行)作为输入产生若干其他行,依此类推。 现在它作为单线程行为运行,因为我只想在一切顺利时提交原始事务。 现在我想通过在更多线程下运行它来加速处理,所以如果我的一个原始适配器产生3行,我想同时处理它们以用于下游流等等。 这是可能的,如果是,我如何定义具有一些配置的全局任务执行器,并允许在此下执行各个阶段的处理。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以在入站适配器和流的其余部分之间的流中插入<gateway/>;轮询器线程将暂停在网关中等待回复。当其他任务完成时,您可能需要聚合器将回复发送到网关。你会放弃回复。

<service-activator input-channel="fromAdapter" ref="gw" output-channel="nullChannel" />

<gateway default-request-channel="toRestOfFlow" />

问题是如果从未收到回复,则线程将永远等待。如果添加reply-timeout,则事务将在超时后提交。所以你可能需要一些额外的逻辑来处理它,也许添加你自己的bean来调用网关并检测到空的回复。

当然,在所有这些场景中;异步任务无法参与原始事务。