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

迪克斯

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

例如,我有两个队列触发器:QueueTrigger1QueueTrigger2在Azure存储两个不同的地方创建斑点时执行的。我只希望一次能够运行一个队列触发器。我已经将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 分钟。

卡尔赵

您已经设置functionAppScaleLimit1,您应该做的另一件事是根据此文档host.json文件中设置batch sizeto 1

如果要最大程度地减少函数应用中队列触发函数的并行执行,可以将批处理大小设置为 1。此设置仅在函数应用在单个虚拟机 (VM) 上运行时消除并发。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章