多台服务器同时对一个数据定时任务,怎么处理 ?

对于一个定时任务,如果当前任务已经被某一个服务器处理后,另外一个服务器就不需要执行这个任务了

1、在定时任务里加锁机制,等某台服务器获取权限,其他服务器将不再执行此次定时任务。
2、在数据库的创建定时任务控制表 job_controller,创建 updated_by 字段,用来存放执行代码的服务器生成的序列号。创建 updateTime 字段,用于记录标记更新 update_by的时间戳,也可以理解为上一次任务执行的时间戳。
3、在代码层面,在执行任务的时候,首先生成一个序列号,然后将序列号存储在当前任务的记录上。然后再从数据库里查询当前记录的序列号,在做标记前,首先检查当前任务的上一次执行时间离当前时间超过阈值(自己定义),如果超过则表明还没有其他节点执行该任务,然后为 task 保存标签和当前运行时间。当然如果上一次运行时间为空的情况下, 也是允许标记的,如果数据库中的序列号与当前节点生成序列号相匹配,则执行任务的具 体逻辑,反之,则什么都不做处理。

你可能感兴趣的:(多台服务器同时对一个数据定时任务,怎么处理 ?)