我正在使用host.json文件中的以下配置在本地使用QueueTrigger测试我的Azure函数(面向.Net Core的v2)
“队列”:{ “ batchSize”:1 “ newBatchThreshold”:0 }
目的是限制每个Function App实例一次只能处理一个队列消息。
如果要最大程度地减少功能应用程序中队列触发功能的并行执行,可以将批处理大小设置为1。仅当功能应用程序在单个虚拟机(VM)上运行时,此设置才消除并发。
在host.json文件中,进行以下配置
{ “队列”:{ “ maxPollingInterval”:2000, “ visibilityTimeout”:“ 00:00:30”, “ batchSize”:16 “ maxDequeueCount”:5 “ newBatchThreshold”:8 } }
在我们的案例中,我并不是要消除并发性,而是要确保每个功能应用实例一次只能处理一个队列消息。然后,如果我们扩展功能应用程序以在多个VM上运行,则可以确保每个VM一次仅处理一个队列消息。更具体地说,该计划是在App Service计划下运行azure函数,而不是在Consumption计划下运行(b / c,您对Consumption计划几乎没有控制权),并设置Scale Out规则以监视队列,直到N个实例(VM)。通过此设置,我们可以专用于每个VM一次运行一个Azure功能应用实例,最多N个VM。
当我在本地进行测试时,即使使用host.json文件中的“ BatchSize:1”配置,我的azure函数也总是同时从队列中获取多个msg。我想知道是否是b / c我正在本地Azure函数运行时中对此进行测试。我尚未在Azure中对此进行测试。希望它可以在Azure中按预期工作。
答案 0 :(得分:2)
原来的问题是“队列”没有嵌套在“扩展名”下
示例:
{
"version": "2.0",
"extensions": {
"queues": {
"maxPollingInterval": "00:00:02",
"visibilityTimeout" : "00:00:30",
"batchSize": 16,
"maxDequeueCount": 5,
"newBatchThreshold": 8
}
}
}
在这种情况下,引用扩展名(Microsoft.Azure.WebJobs.Extensions.Storage
也应至少为3.0.1
,因为以前a bug的newBatchThreshold
设置为0。