Spring Batch Job处理多台机器上的事务序列

问题描述 投票:0回答:1

我正在使用Spring Batch作业,我有一个计划每分钟进行一次的作业,并从数据库中获取最新的事务,例如,用于在多台机器上计划的负载平衡作业。如果Machine1执行作业,然后在Machine2上安排了相同的作业,则我按时间处理了唯一的事务,我在读取时在数据库中存储了最小-最大时间,因此当该作业在另一个上进行调度时,则花费了最小-最大时间然后根据时间执行作业。

但是我有一个问题,实际上,我想根据客户ID维护交易的顺序,例如,如果Machine1执行交易1到100,而Machine2执行交易101到200,交易100和101由同一个客户完成的交易要比交易的处理顺序相同。

就我而言,Machine1没有完成任务,而Machine2同时开始了它的处理,因此这里的问题是第101个事务在第100个事务之前进行了处理。检查下图中的执行流程。enter image description here

spring database spring-batch scheduling jobs
1个回答
0
投票

我按时间处理了唯一的事务,我在读取时将最小-最大时间存储在数据库中,因此当作业在其他时间安排时,它花费了最小-最大时间并根据时间执行作业。

我不会实现自己的事务序列化逻辑,这是一个不小的问题。您可以做的是使用作业存储库来防止在集群环境中重复执行作业。当使用主动隔离级别(例如SERIALIZABLE)时,此选项可利用数据库功能。这里有一个类似的问题:Activate Batch on only one Server instance

就我而言,Machine1没有完成任务,而Machine2同时开始了它的处理,

如果任务是独立的,那应该不成问题。并行性的第一个规则是使每个工作单元彼此独立。因此,我将为每个作业分配一个不同的任务,以便能够在不同的计算机上并行运行它们,而不必同步数据库访问或处理重叠的计划。

© www.soinside.com 2019 - 2024. All rights reserved.