如何限制并发Azure函数的执行

时间:2018-11-02 19:16:29

标签: azure azure-functions azure-queues

我已经看到很多问题,但是我还没有找到可行的解决方案。

简而言之,我会定期进行大量处理操作。每个操作均由Azure函数处理。每个操作都会调用数据库。如果我有太多同时运行的并发函数,这会使数据库超载,并且会出现超时错误。因此,我希望能够限制一次运行的并发Azure Function调用的数量。

我已经基于网上看到的内容,以多种方式将函数切换为队列触发并调整了batchSize / newBatchThreshold / maxDequeueCount host.json设置。我还已在功能应用程序设置中将WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT应用程序设置设置为1,以防止产生多个虚拟机。

但是,每次我填充该队列时,都会无序生成多个函数,并且数据库将崩溃。

如何限制并发操作的数量?

1 个答案:

答案 0 :(得分:4)

问题最终导致V1和V2函数中host.json的格式存在差异。以下是正确的配置(至少使用Microsoft.Azure.WebJobs.Extensions.Storage 3.0.1)。以下host.json配置单个功能应用程序以按顺序处理队列消息。

{ 
  "version":"2.0",
  "extensions": { 
    "queues": { 
      "batchSize": 1,
      "newBatchThreshold": 0 
     }
   } 
}

设置应用程序设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT = 1限制了功能应用程序无法动态扩展到一个以上实例之外。