【问题标题】:How to understand when shedlock was acquired and released?如何理解 shedlock 何时被获取和释放?
【发布时间】:2019-03-31 09:07:08
【问题描述】:

我有这样的代码:

private final ThreadPoolTaskScheduler threadPoolTaskScheduler; // spring
private final LockingTaskExecutor lockingTaskExecutor; // shedlock
....
    threadPoolTaskScheduler.scheduleWithFixedDelay(
                    () -> {
                        lockConfiguration = ...
                        long start = System.currentTimeMillis();
                        LOGGER.info("Spring scheduler started task, awaiting shedlock ");
                        lockingTaskExecutor.executeWithLock((Runnable) () -> {
                                    LOGGER.info("Shedlock acquired. duration=[{}]ms", propertyItem, System.currentTimeMillis() - start);
                                taks();
                                },
                                lockConfiguration);
                    }, someInterval);

我有 2 个节点。根据日志,我看到task() 仅适用于第一个节点的情况。在第二个节点上我只看到Spring scheduler started task, awaiting shedlock

我认为它不应该以这种方式工作,我想调查它发生的原因。

锁定释放后如何订阅事件?

shedlock 尝试获取锁多长时间?

附言

someInterval = 30 分钟

lockConfiguration:至少 = 5 分钟,最多 = 20 分钟

【问题讨论】:

    标签: java spring-boot locking distributed-system shedlock


    【解决方案1】:

    我研究了源代码,发现 shedlock 尝试获取锁,如果锁忙它只是跳过任务

    【讨论】:

    • 写在 ShedLock 自述文件的第一段(粗体)
    • @Lukas 所以你同意
    • 如果我的服务器在不同的时区运行,@Lukas 是否会工作?我在数据库中看到locked_intil 和locked_at 存放在我的时区
    • 对于 JDBC 提供程序,您可以指定时区 github.com/lukas-krecan/ShedLock/blob/master/providers/jdbc/…
    • @Lukas 如果我在每个节点上指定 UTC,它会起作用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多