簡體   English   中英

當 Sleuth 存在時,ShedLock 不鎖定

[英]ShedLock not lock when Sleuth is present

有一個應用程序通過調度程序運行某個進程,就像我們有多個實例一樣,我們選擇shedlock來阻止其他運行相同的進程。 但是,由於sleuth提供了一個 Runnable 實例,它是 TraceRunnable 並且預期是 ScheduledMethodRunnable,所以它不起作用。 有什么想法可以解決這個問題嗎?

class SpringLockConfigurationExtractor

@Override
public Optional<LockConfiguration> getLockConfiguration(Runnable task) {
    if (task instanceof ScheduledMethodRunnable) {
        ScheduledMethodRunnable scheduledMethodRunnable = (ScheduledMethodRunnable) task;
        return getLockConfiguration(scheduledMethodRunnable.getTarget(), scheduledMethodRunnable.getMethod());
    } else {
        logger.debug("Unknown task type " + task);
    }
    return Optional.empty();
} 

我與開發人員交談並按照文檔將 param interceptMode 設置為PROXY_METHOD及其工作。 他提到這將是未來版本中的默認值,有利於避免此類問題。

@EnableSchedulerLock(defaultLockAtMostFor = "PT5M", interceptMode = PROXY_METHOD)

您必須提供自己的SchedulerProxyScheduledLockAdvisor實現來驗證任務的 class 是否是TraceRunnable 如有必要,您還可以禁用部分 Sleuth。 你也可以向 Shedlock 的作者索取一些鈎子來解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM