【问题标题】:Semaphore in Azure Web JobAzure Web 作业中的信号量
【发布时间】:2018-04-27 02:45:15
【问题描述】:

我想知道信号量(锁)是否可以在 Azure 函数中工作。 我不希望同时运行两个单独的 webjobs。网络作业使用相同的应用服务计划。

这是我可以用信号量保证的吗? (因为这会启用跨进程锁定?)

【问题讨论】:

    标签: azure azure-functions azure-webjobs


    【解决方案1】:

    第一个问题:您说的是函数和 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 运行的函数。

    定时器触发器支持多实例横向扩展。特定计时器函数的单个实例跨所有实例运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      相关资源
      最近更新 更多