锁定作业如何在议程node.js中工作?

时间:2017-07-25 07:12:06

标签: node.js locking jobs agenda

我们一直在我们的node.js服务器中使用议程,并对作业锁定机制如何在议程中起作用感到困惑。

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

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

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

1 个答案:

答案 0 :(得分:1)

运行作业时,数据库条目将自动设置lockedAt时间戳,这可确保没有其他节点实例将运行相同的作业。意思是“嘿,我正在从事这份工作,不要碰它”

当另一个节点实例读取作业时,它将对照锁定时间戳记检查当前时间,如果少于10分钟,它将不会运行该作业。

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