【发布时间】:2018-04-27 02:45:15
【问题描述】:
我想知道信号量(锁)是否可以在 Azure 函数中工作。 我不希望同时运行两个单独的 webjobs。网络作业使用相同的应用服务计划。
这是我可以用信号量保证的吗? (因为这会启用跨进程锁定?)
【问题讨论】:
标签: azure azure-functions azure-webjobs
我想知道信号量(锁)是否可以在 Azure 函数中工作。 我不希望同时运行两个单独的 webjobs。网络作业使用相同的应用服务计划。
这是我可以用信号量保证的吗? (因为这会启用跨进程锁定?)
【问题讨论】:
标签: azure azure-functions azure-webjobs
第一个问题:您说的是函数和 WebJobs。是哪一个?
如果您的应用服务计划进行任何扩展,信号量将不起作用,因为两个实例可能在两台不同的机器上启动。好消息:(对于 WebJobs)有一个简单的解决方案。
[Singleton]
public static async Task ProcessImage([BlobTrigger("images")] Stream image)
{
// Process the image
}
在此示例中,在任何给定时间只会运行 ProcessImage 函数的单个实例。当函数被添加到图像容器的新图像触发时,运行时将首先尝试获取锁(blob 租约)。一旦获得锁,就会在函数执行期间持有锁(并且更新 blob 租约),确保不会运行其他实例。如果在该函数运行时触发了另一个函数实例,它将等待锁,并定期轮询它。
您可以在这里找到更多信息:Azure WebJobs SDK - Singleton
编辑:
如果您使用的是 Azure Functions:那些基于 TimerTrigger seem to run as Singletons 运行的函数。
定时器触发器支持多实例横向扩展。特定计时器函数的单个实例跨所有实例运行。
【讨论】: