1 的 Azure Functions functionAppScaleLimit 未按预期工作以限制队列触发器的并发性

Azure Functions functionAppScaleLimit of 1 isn't working as expected to limit concurrency on Queue Trigger

我有一个设置了多个队列触发器的函数应用程序,我试图通过将 functionAppScaleLimit 设置为 1 来限制并发。对此进行测试后,我遇到了超时,因为两个队列触发器将大约同时执行,但只允许一个工作,而另一个等待。

例如,我有两个队列触发器:QueueTrigger1QueueTrigger2,它们在 Azure 存储中的两个不同位置创建 blob 时执行。我只希望队列触发器之一能够一次 运行。我已经将 batchSize 参数设置为 1,因此一次只处理一条消息。每个队列触发器最多可能需要 8 分钟才能完成脚本的执行。如果两个触发器大约同时执行,一个将完成,另一个将超时,然后重试并成功完成。

这是来自 QueueTrigger1 的示例日志:
2020-10-26 07:37:49.201 Executing 'Functions.QueueTrigger1' (Reason='New queue message detected on 'etl-queue-items-1'.', Id=<queue-trigger-1-id>)
//processes work in Python
2020-10-26 07:45:49.472 Executed 'Functions.QueueTrigger1' (Succeeded, Id=<queue-trigger-1-id>, Duration=480291ms)

QueueTrigger2
2020-10-26 07:37:56.922 Executing 'Functions.QueueTrigger2' (Reason='New queue message detected on 'etl-queue-items-2'.', Id=<queue-trigger-2-id>)
//8 minutes later
2020-10-26 07:45:49.439 Python queue trigger function processed a queue item:
//attempts to process work in Python
2020-10-26 07:47:56.927 Timeout value of 00:10:00 exceeded by function 'Functions.QueueTrigger2' (Id: '<queue-trigger-2-id>'). Initiating cancellation.
2020-10-26 07:47:56.987 Executed '{functionName}' ({status}, Id={invocationId}, Duration={executionDuration}ms)
2020-10-26 07:47:56.987 Executed 'Functions.QueueTrigger2' (Failed, Id=<queue-trigger-2-id><queue-trigger-2-id>, Duration=600043ms)

QueueTrigger2 在它开始做任何工作之前就应用了 10 分钟的限制,这似乎是不公平的。我如何确保每个队列独立触发 运行,这样我就可以确保不超过 1.5GB 内存限制而不必依赖重试?

编辑:我在 Linux 消费计划中,所以我的 functionTimeout 仅限 10 分钟。

您已经将functionAppScaleLimit设置为1,您应该做的另一件事是在[=20=中将batch size设置为1 ] 文件根据此 document :

If you want to minimize parallel execution for queue-triggered functions in a function app, you can set the batch size to 1. This setting eliminates concurrency only so long as your function app runs on a single virtual machine (VM).