3

我们已经在我们的 node.js 服务器中使用了一段时间的议程,并且对工作锁定机制在议程中的工作方式感到困惑。

  • 有时我们会看到数据库中作业的“lockedAt”字段具有非空值,并且它突然变为空。
  • 有时,'lockedAt' 值保持为空并且作业卡住。
  • 有时,10 分钟后,'lockedAt' 值会更新,但作业仍然卡住。

如果我重新启动 node.js 服务器,所有锁定的作业都会解锁并正确执行。

为什么需要这种锁定机制?它有什么作用 ?

4

1 回答 1

2

当您运行作业时,db 条目将自动设置lockedAt时间戳,这确保没有其他节点实例将运行相同的作业。意思是“嘿,我正在做这份工作,别碰它”

当另一个节点实例读取作业时,它会根据锁定时间戳检查当前时间,如果小于 10 分钟,则不会运行作业。

这个“10 分钟”存储在议程全局配置或作业配置选项中,两者都来自代码。您可以通过将defaultlocklifetimenumber设置为不同的值来更改它。

于 2018-06-21T16:17:17.240 回答