重试机制

两个重试机制

1.定时脚本从数据库中捞失败的任务重新执行。因为失败是偶然的,所以我们在建表的时候在task表里基于

status字段加了索引,且还会有一个count字段。达到Config里某一次数即会进行一个告警

2.调度模块重试上一分钟的任务分片,这里的设计就是比较巧妙了。

我们调度模块打捞上来的任务分片就会交给触发器从一个zset里每隔1s就会去 zrange,拿到里面的任务,然后交给执行器去触发。如果执行器执行成功了,就会延长分布式锁的时间到2min多一点,保证不会被重复执行。如果执行失败的话,就是不会去延长分布式锁的,下一分钟就会去重试上一分钟

会有重复执行的问题吗?

目前是有可能的,我们这个项目只能做到至少执行一次,因为这是一个分布式事务的问题。就比如说当我们回

调业务方时,因为网络原因,我们这边以为回调失败了,但其实回调成功了。那这个业务得去做下幂等处理,

比如说回调时把taskid传过去,业务方执行前做下查重