Как работает блокировка заданий в повестке дня node.js?

Некоторое время мы использовали повестку дня на нашем сервере node.js и не понимаем, как работает механизм блокировки заданий в повестке дня.

  • Иногда мы видим, что поле lockedAt для задания в базе данных имеет ненулевое значение, и оно внезапно меняется на ноль.
  • Иногда значение lockedAt остается равным нулю, и задания застревают.
  • Иногда через 10 минут значение "lockedAt" обновляется, но задание все равно застревает.

И если я перезапущу сервер node.js, все заблокированные задания будут разблокированы и выполнены должным образом.

Зачем нужен этот механизм блокировки? Что оно делает?

1 ответ

Когда вы запускаете задание, запись в БД автоматически установит lockedAt отметка времени, это гарантирует, что другой экземпляр узла не будет выполнять то же задание. Это значит "эй, я работаю над этой работой, не трогай ее"

Когда другой экземпляр узла читает задание, он сравнивает текущее время с отметкой времени блокировки, если оно прошло менее 10 минут, задание не будет запущено.

Эти "10 минут" хранятся в глобальных параметрах повестки дня или параметрах конфигурации задания, оба из кода. Вы можете изменить его, установив defaultlocklifetimenumber на другое значение.

Другие вопросы по тегам