删除SingletonAttribute后,无法在Azure WebJob中获取Singleton锁

时间:2018-03-21 09:56:32

标签: azure-webjobssdk

我有一个包含if (table[0] == 1 && table[table.length - 1] == 1) { //there is a circular cluster //do your calcs (count the ones from the beggining and from the end, etc... } 函数的WebJob。他们也有一个TimeTriggerAttribute,所以他们不会并行执行。

在App Service中部署的一切都按预期工作。

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

  

应用了开发设置

     

找到以下功能:

     

MyNamespace.WebJobs.Functions.MyFunctionAsync

     

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

我删除了singleton属性,但消息仍然显示。我还重新构建了项目并重新启动了机器。什么都没有帮助。

我重命名了该功能,并按预期再次安排。现在我也可以重新添加SingletonAttribute,一切都按预期工作。当我将其重命名为原始版本时,错误会恢复。

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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