为事务下的中间步骤的并行处理配置一个任务执行器



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

感谢

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

<service-activator input-channel="fromAdapter" ref="gw" output-channel="nullChannel" />
<gateway default-request-channel="toRestOfFlow" />

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

当然,在所有这些情况下;异步任务不能参与原始事务。

最新更新