如何限制并发 Azure Function 执行

var*_*ian 4 azure azure-queues azure-functions

我已经看到这个问题表达了很多,但我还没有找到一个可行的解决方案。

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

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

然而,每次我填满那个队列时,多个函数会不加选择地产生,我的数据库会崩溃。

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

Mar*_*ger 9

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

{ 
  "version":"2.0",
  "extensions": { 
    "queues": { 
      "batchSize": 1,
      "newBatchThreshold": 0 
     }
   } 
}
Run Code Online (Sandbox Code Playgroud)

设置应用设置会WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT = 1限制函数应用动态扩展到一个实例之外。