1

在多台服务器上运行多个计划任务时,Shedlock 看起来很棒,但有时,我们也需要短时间或长时间地暂停一些任务。当然,可以使用附加属性/标志来控制每个任务,但我的建议是也为此使用 Shedlock,并为我们希望停止的任务引入逻辑“节点/服务器”,并更新 shedlock 中的行- 锁定该节点的表,并在未来设置一个lockedAt 时间,并将lockUntil 设置为future + 1 秒(因此不会触发超过maxRunning 的时间)。然后它会自动重新开始,或者如果需要,我们可以进入并将时间移到更远的未来。

对 Shedlock 的这种使用有什么想法……聪明还是坏习惯?它仍然用于锁定,只是将作业锁定到逻辑假服务器。

4

1 回答 1

0

为此,有可能(误用)ShedLock。您正在查找的更新可能如下所示:

update shedlock set lock_until = :future, locked_at = now(), locked_by = "manual" where 
      name = :name and lock_until < now()

重要的部分是lock_until < now()防止干预正在运行的任务的现有锁的条件。您不必设置locked_by,因为它大多被库忽略。最好设置它以防其他人想知道为什么没有执行任务。

于 2021-04-09T06:40:45.297 回答