目前使用的是v2.3.0的xxl-job,发现一个问题,具体如下:
-
xxl-job是通过数据库实现的分布式锁,即:select * from xxl_job_lock where lock_name = 'schedule_lock' for update
-
如果在此语句执行后,还未提交事务前,xxl-job由于某种原因(宕机或网络),导致还没来得及提交事务,那么就会导致此表的锁一直不释放,从而所有任务被阻塞。
-
就算xxl-job重启后恢复,由于之前的数据库锁一直存在,任务仍然一直被阻塞,除非人工介入操作数据库将此锁释放才行
不知道这是否算是系统的缺陷,或者有什么解决办法吗
目前能想到只能是使用redis分布式锁做改造
PS:经测试,当客户端关闭时,能够释放连接。但如果出现网络故障,则不会释放连接(即使网络后续恢复)它将导致锁一直等待。