有两个定时任务在特定时间触发,同时对数据进行操作,且任务之间存在并发执行的场景。主要涉及的表为 lingyejun_task,涉及到的操作有:数据插入、推送、状态更新和错误处理。
定时任务A负责生成数据,定时任务B负责将生成好的数据处理并推送到第三方系统,由于出问题的时候定时任务A生成数据是一条一条循环生成,并没有声明事务,所以会有一些不符合预期的情况发生,下面让我们详细看看。
msg contains
逻辑”。由于错误,任务B按失败处理,并根据唯一键重新更新状态,将 4 条数据标记为失败。msg contains
逻辑”,这可能是由于并发导致的查询结果不一致,或者推送接口的逻辑判断出现了问题。- 可以使用 Redis 或数据库锁来控制任务的并发执行,确保任务之间不会相互干扰。
本问题的核心是并发操作导致的资源竞争和数据一致性问题,主要体现在定时任务之间没有有效的同步和协调,导致数据写入、推送和状态更新的顺序错误。为解决这一问题,需要在任务执行时引入更严格的同步控制、事务管理和错误处理机制,同时优化任务调度和数据处理逻辑,确保并发任务间的数据一致性和稳定性。
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。