【问题标题】:Unable to acquire Singleton lock in Azure WebJob after removing SingletonAttribute删除 SingletonAttribute 后无法在 Azure WebJob 中获取 Singleton 锁
【发布时间】:2018-03-21 09:56:32
【问题描述】:

我有一个 WebJob,其中包含具有 TimeTriggerAttribute 的函数。它们还有一个SingletonAttribute,所以它们不会被并行执行。

部署在应用服务中,一切正常。

在本地运行时,它确实按预期工作了一段时间,然后作业主机的输出报告:

已应用开发设置

找到以下函数:

MyNamespace.WebJobs.Functions.MyFunctionAsync

无法获取单例锁 (bd99766f202e4ac4ba230557b7180bd2/MyNamespace.WebJobs.Functions.MyFuncitonAsync.Listener)。

我删除了单例属性,但消息仍然显示。我还重新构建了项目并重新启动了机器。没有任何帮助。

我重命名了函数,它再次按预期安排。现在我还可以重新添加SingletonAttribute,一切都按预期工作。当我将其重命名为原始名称时,错误又回来了。

如何才能再次从作业主机获取锁?

【问题讨论】:

  • 我发现了一个article 有类似的问题。你也可以阅读article 来学习 TimeTrigger 中的单例锁。如果无法获取 blob 租约,一般意味着该函数的另一个实例正在运行,因此该函数未在当前主机中启动。你可以在你身边检查。或提供您有问题的代码。

标签: azure-webjobssdk


【解决方案1】:

通过阅读this article,我发现在我设置的SingletonAttribute 之上,TimeTriggerAttribute 在幕后使用了另一个。谢谢Janley Zhang

默认情况下,主机的 ID 在部署中是不变的。因此,当使用相同存储帐户的多个开发人员在本地执行代码时,他们会尝试获取相同的 blob 租约,并且只有第一个会成功。

我最终为每个开发者使用了不同的主机 ID,例如

if (jobHostConfiguration.IsDevelopment)
{
    jobHostConfiguration.UseDevelopmentSettings();
    jobHostConfiguration.HostId = Environment.UserName.ToLowerInvariant();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多