我有一个 WebJob,其中包含具有 TimeTriggerAttribute
的函数。它们还有一个 SingletonAttribute
,因此它们不会并行执行。
部署在应用服务中,一切都按预期运行。
在本地运行它时,它确实按预期工作了一段时间,然后作业主机报告的输出:
Development settings applied
Found the following functions:
MyNamespace.WebJobs.Functions.MyFunctionAsync
Unable to acquire Singleton lock (bd99766f202e4ac4ba230557b7180bd2/MyNamespace.WebJobs.Functions.MyFuncitonAsync.Listener).
我删除了单例属性,但该消息仍然显示。我还重新构建了项目并重新启动了机器。没有任何帮助。
我重命名了该函数,并且它再次按预期安排。现在我还可以重新添加 SingletonAttribute
并且一切都按预期工作。当我将其重命名回原来的名称时,错误又出现了。
我该怎么做才能再次从作业主机获取锁?
最佳答案
通过阅读this article我发现在我设置的 SingletonAttribute
之上,TimeTriggerAttribute
在幕后使用了另一个。谢谢Janley Zhang .
默认情况下,主机 ID 在部署中保持不变。因此,当使用同一存储帐户的多个开发人员在本地执行代码时,他们会尝试获取相同的 blob 租约,并且只有第一个会成功。
我最终为每个开发人员使用了不同的主机 ID,例如
if (jobHostConfiguration.IsDevelopment)
{
jobHostConfiguration.UseDevelopmentSettings();
jobHostConfiguration.HostId = Environment.UserName.ToLowerInvariant();
}
关于azure-webjobssdk - 删除 SingletonAttribute 后无法在 Azure WebJob 中获取 Singleton 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49403131/