【问题标题】:Shedlock and temporary stop task(s)?Shedlock 和临时停止任务?
【发布时间】:2021-07-04 12:46:00
【问题描述】:

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

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

【问题讨论】:

    标签: shedlock


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,谢谢,是的,文档提到更新是可能的,但不能添加/删除行,试图弄清楚或接受它的使用量(误用),因为仍在使用 Shedlock用于锁定,但要节点“手动”。计划中使用locked_by,在界面中将其可视化。但是跳过了 lock_until
    • 这是滥用,只是因为它不是库的设计目的,但不应该有任何问题。缓存只包含表中的行已经存在的信息,所以我们不会尝试一遍又一遍地插入它。我会澄清文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多