Spring 批处理 - 重新触发服务激活器
Spring Batch - Re-triggering Service Activator
我们有一个 Spring 批处理应用程序,它 运行 处于主从模式。在 master 端有一个 Reader,它查询源数据库并在将记录推送到中间 table 之前对记录进行一些处理。
发生这种情况时,master 也会并行启动 slaves。这些slaves从中间table中读取受其分区影响的记录并同时开始处理它们,有5个slave在中间table中有不同的记录分区要处理。
Master 和 Slaves 运行 在不同的 JVM 中。
master使用MessageChannelPartitionHandler与slave进行通信。在slave端,有一个Service Activator触发了从中间table读取和处理记录的步骤。服务激活发生在分区消息到达指定通道时。完成后,每个从站通过回复通道向主站确认。
假设,如果在从源数据库中提取记录时在 Master 端出现问题,或者在将记录插入中间数据库时出现网络延迟 table。奴隶看不到他们分区的任何新记录,因此他们的阅读器自动关闭,他们过早地开始向主人发送回复。
不过,master端的处理还没有完全完成。从属步骤完成后,中间可以有更多的新记录table。当这种情况发生时,所有这些溢出的记录只能在下一个 Job 运行 中处理。
遇到这种情况,有没有办法让master在slave上再次触发Service Activation?换句话说,我们是否可以强制slaves等到master的处理完全完成并且中间的所有记录都可用table,然后才向master发送回复消息?
After the slave steps are completed there can be some more new records in the intermediate table
批处理就是处理固定个数据集。如果数据源在移动,就变成了流处理。为作业分配固定数据集可实现可重启性。
根据您的设计,分区不是固定的。所以你需要确保每个slave处理一组固定的记录或者改用流式解决方案。
我们有一个 Spring 批处理应用程序,它 运行 处于主从模式。在 master 端有一个 Reader,它查询源数据库并在将记录推送到中间 table 之前对记录进行一些处理。
发生这种情况时,master 也会并行启动 slaves。这些slaves从中间table中读取受其分区影响的记录并同时开始处理它们,有5个slave在中间table中有不同的记录分区要处理。
Master 和 Slaves 运行 在不同的 JVM 中。
master使用MessageChannelPartitionHandler与slave进行通信。在slave端,有一个Service Activator触发了从中间table读取和处理记录的步骤。服务激活发生在分区消息到达指定通道时。完成后,每个从站通过回复通道向主站确认。
假设,如果在从源数据库中提取记录时在 Master 端出现问题,或者在将记录插入中间数据库时出现网络延迟 table。奴隶看不到他们分区的任何新记录,因此他们的阅读器自动关闭,他们过早地开始向主人发送回复。
不过,master端的处理还没有完全完成。从属步骤完成后,中间可以有更多的新记录table。当这种情况发生时,所有这些溢出的记录只能在下一个 Job 运行 中处理。
遇到这种情况,有没有办法让master在slave上再次触发Service Activation?换句话说,我们是否可以强制slaves等到master的处理完全完成并且中间的所有记录都可用table,然后才向master发送回复消息?
After the slave steps are completed there can be some more new records in the intermediate table
批处理就是处理固定个数据集。如果数据源在移动,就变成了流处理。为作业分配固定数据集可实现可重启性。
根据您的设计,分区不是固定的。所以你需要确保每个slave处理一组固定的记录或者改用流式解决方案。