如何限制并发 Azure 函数执行
How to limit concurrent Azure Function executions
我看到很多人表达了这个问题,但我还没有找到有效的解决方案。
简而言之,我定期有大量的处理操作要做。每个操作都由一个 Azure 函数处理。每个操作都会调用数据库。如果我同时有太多 运行ning 并发函数,这会使数据库过载并且我会收到超时错误。因此,我希望能够限制一次 运行 的并发 Azure 函数调用的数量。
我已经将函数切换为队列触发,并根据我在网上看到的内容以多种方式调整了 batchSize / newBatchThreshold / maxDequeueCount host.json 设置。我还在我的函数应用程序设置中将 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 应用程序设置设置为 1,以防止生成多个 VM。
然而,每次我填满那个队列时,多个函数会不分青红皂白地产生,我的数据库就会崩溃。
如何限制并发操作的数量?
问题最终是 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
限制功能应用程序动态扩展到一个实例之外。
我看到很多人表达了这个问题,但我还没有找到有效的解决方案。
简而言之,我定期有大量的处理操作要做。每个操作都由一个 Azure 函数处理。每个操作都会调用数据库。如果我同时有太多 运行ning 并发函数,这会使数据库过载并且我会收到超时错误。因此,我希望能够限制一次 运行 的并发 Azure 函数调用的数量。
我已经将函数切换为队列触发,并根据我在网上看到的内容以多种方式调整了 batchSize / newBatchThreshold / maxDequeueCount host.json 设置。我还在我的函数应用程序设置中将 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 应用程序设置设置为 1,以防止生成多个 VM。
然而,每次我填满那个队列时,多个函数会不分青红皂白地产生,我的数据库就会崩溃。
如何限制并发操作的数量?
问题最终是 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
限制功能应用程序动态扩展到一个实例之外。