只用数据库如何支持分布式task - mysql乐观锁

通用思路:

1、task加上优雅关机代码(休眠30s):设置closeflag=1
2、一张表 -> task分布式支持表(id,taskName(任务名),taskStatus(执行状态,0待执行,1执行中),taskConditionVal(任务条件值,与taskStatus配合,判断任务是否要执行),taskProgressVal(任务进度值),ip,createdAt,updatedAt)

假设定时任务每半小时执行一次,进入业务逻辑的前提是closeflag != 1

执行任务时,多台机器同时set taskStatus=1, ip=XXX where taskStatus=0 and taskConditionVal ??? ;只有一台服务器能抢占到资源,逻辑往下执行
执行过程中,select ... where taskProgressVal > XXX; 执行过程中服务重启,优雅关机-》set taskStatus=0,taskProgressVal= XXX 就可以保证下一次任务会继续执行
服务器执行完,set taskStatus=0, taskConditionVal=XXX ,taskProgressVal=初始值

 

 

case by case 思路:
task加上优雅关机代码(休眠30s):设置closeflag=1

任务:每30分钟执行一次,进入业务逻辑的前提是closeflag != 1
1、时间是13点-15点,将 task_flag!=0 的全部设置为0(待执行)
2、下午15点30,乐观锁式抢占处理数据 set task_flag = 1(执行中) where task_flag=0 ;
   处理成功set task_flag = 2(执行成功)
   处理失败set task_flag = 0 ,下一次task启动时重试
   机器重启,有优雅关机,一定会保证当前数据处理完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值