Spring Batch-重新触发Service Activator



我们有一个在主从模式下运行的Spring Batch应用程序。在master端有一个Reader,它查询源数据库并在将记录推入中间表之前对记录进行一些处理。

当这种情况发生时,主程序也会并行启动从属程序。这些从设备从受其分区约束的中间表中读取记录,并同时开始处理它们,中间表中有5个从设备需要处理不同的记录分区。

Master和Slave在不同的JVM中运行。

主设备使用MessageChannelPartitionHandler与从属设备进行通信。在从属端,有一个Service Activator,它触发从中间表读取和处理记录的步骤。服务激活发生在分区消息到达指定通道时。一旦完成,每个从设备通过应答通道向主设备进行确认。

假设在从源数据库中提取记录时Master端出现了一些问题,或者在将记录插入中间表时出现了一些网络延迟。从设备看不到分区的任何新记录,因此它们的读卡器会自动关闭,并提前开始向主设备发送回复。

然而,大师的过程还没有完全完成。在从属步骤完成后,中间表中可能会有更多的新记录。当出现这种情况时,所有这些溢出的记录只能在下一次作业运行期间进行处理。

当这种情况发生时,有没有办法从主服务器再次触发从属服务器的服务激活?换言之,我们是否可以强制从属服务器等待主服务器的处理完全完成,并且中间表中的所有记录都可用,然后再向主服务器发送回复消息?

从属步骤完成后,中间表中可能会有更多的新记录

批处理是指处理固定的数据集。如果数据源正在移动,它将变成流处理。为作业分配固定的数据集是实现可重启性的原因。

根据您的设计,分区不是固定的。因此,您需要确保每个从属服务器都处理一组固定的记录,或者使用流式解决方案。

最新更新