我们已经在我们的 node.js 服务器中使用了一段时间的议程,并且对工作锁定机制在议程中的工作方式感到困惑。
- 有时我们会看到数据库中作业的“lockedAt”字段具有非空值,并且它突然变为空。
- 有时,'lockedAt' 值保持为空并且作业卡住。
- 有时,10 分钟后,'lockedAt' 值会更新,但作业仍然卡住。
如果我重新启动 node.js 服务器,所有锁定的作业都会解锁并正确执行。
为什么需要这种锁定机制?它有什么作用 ?
当您运行作业时,db 条目将自动设置lockedAt
时间戳,这确保没有其他节点实例将运行相同的作业。意思是“嘿,我正在做这份工作,别碰它”
当另一个节点实例读取作业时,它会根据锁定时间戳检查当前时间,如果小于 10 分钟,则不会运行作业。
这个“10 分钟”存储在议程全局配置或作业配置选项中,两者都来自代码。您可以通过将defaultlocklifetimenumber设置为不同的值来更改它。