删除 SingletonAttribute 后,无法在 Azure Web Job 中获取单一实例锁



我有一个包含具有TimeTriggerAttribute函数的WebJob。它们还有一个SingletonAttribute,因此它们不会并行执行。

部署在应用服务中,一切按预期工作。

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

应用了开发设置

找到以下功能:

MyNamespace.WebJobs.Functions.MyFunctionAsync

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

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

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

为了能够再次从作业主机获取锁,我该怎么做?

通过阅读这篇文章,我发现在我设置的SingletonAttribute之上,TimeTriggerAttribute在幕后使用了另一个。谢谢张健利。

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

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

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

最新更新