Open Kang-shen opened 4 years ago
我也出现同样的问题
我目前线上暂时只用了一个调度中心。测试环境部署多个就会概率性出现这种问题,而且概率还不低,无奈只能这样。作者也没有说法,很尴尬。
我这边出现的概率奇高接近90%,再研究一段时间,降低版本再试试,一直无法解决只能放弃了,生产环境重复任务太致命了,目前我也是只保留了一台调度中心
问题已解决:问题是批量执行sql脚本时此INSERT INTO xxl_job_lock ( lock_name) VALUES ( 'schedule_lock');脚本没生效,导致DB锁未生效
谢谢反馈。那我的问题可能和你还不太一样,我测试环境这个数据是有的。我这边压测出现的概率是比较低的,一万次调度差不多有20-30笔重复执行的。
少量重复建议做个redis锁和幂等
@jipeigong 能详细讲一下如何解决的吗?
我也遇到这个问题,看代码xxl_job_lock这个表感觉没用,有人解决吗
xxl_job_lock这个是排它锁,会阻塞,如果持有锁的线程释放了,会出现重复执行
如果持有锁的线程释放了,会出现重复执行
问题是 select for update 锁完表之后,调度线程会修改了任务下次触发的时候再 commit。commit 之后令一个节点才能获取到锁再去执行任务的查询。 所以持有锁的线程释放是指?第一个 commit 了?那就不应该重复执行啊。 我现在也遇到这个问题了,看上去像是没锁住,但是我用两个 session 分别去读数据,发现确实是上锁了。
先贴几张图,看看效果:
环境和版本说明:xxl-job版本为2.1.2;调度器和执行器都是通过k8s部署了3个节点 如图一所示,同一个任务在同一时间执行了3次,分别由不同的调度器调度,因为路由策略选的是一致性HASH,所以同一个任务的执行器是在同一个机器执行。
想问下,这种情况升级到最新版本能解决吗?还是说可以通过其他设置能避免这种问题? @xuxueli 因为我们对这个框架做了比较多的自定义开发,升级版本的成本要高一些,还请告知一下,谢谢!