Как работает блокировка заданий в повестке дня node.js?
Некоторое время мы использовали повестку дня на нашем сервере node.js и не понимаем, как работает механизм блокировки заданий в повестке дня.
- Иногда мы видим, что поле lockedAt для задания в базе данных имеет ненулевое значение, и оно внезапно меняется на ноль.
- Иногда значение lockedAt остается равным нулю, и задания застревают.
- Иногда через 10 минут значение "lockedAt" обновляется, но задание все равно застревает.
И если я перезапущу сервер node.js, все заблокированные задания будут разблокированы и выполнены должным образом.
Зачем нужен этот механизм блокировки? Что оно делает?
1 ответ
Когда вы запускаете задание, запись в БД автоматически установит lockedAt
отметка времени, это гарантирует, что другой экземпляр узла не будет выполнять то же задание. Это значит "эй, я работаю над этой работой, не трогай ее"
Когда другой экземпляр узла читает задание, он сравнивает текущее время с отметкой времени блокировки, если оно прошло менее 10 минут, задание не будет запущено.
Эти "10 минут" хранятся в глобальных параметрах повестки дня или параметрах конфигурации задания, оба из кода. Вы можете изменить его, установив defaultlocklifetimenumber на другое значение.