Azure functions 在本地运行时,带有QueueTrigger的Azure函数(.Net Core上的v2)不支持BatchSize
我正在使用QueueTrigger在host.json文件中使用以下配置在本地测试Azure函数(v2针对.Net核心) “队列”:{ “批量大小”:1, “newBatchThreshold”:0 } 目的是限制每个函数应用程序实例一次只处理一个队列消息 根据, 如果要最小化函数应用程序中队列触发函数的并行执行,可以将批大小设置为1。此设置仅在功能应用程序在单个虚拟机(VM)上运行时才消除并发 在host.json文件中,进行以下配置 { “队列”:{ “maxPollingInterval”:2000年, “可见性超时”:“00:00:30”, “批量大小”:16, “maxDequeueCount”:5, “纽巴奇阈值”:8 } } 在我们的例子中,我并没有试图消除并发性,但我试图确保每个函数应用程序实例一次只处理一个队列消息。然后,如果我们扩展功能应用程序以在多个VM上运行,则每个VM保证一次只处理一个队列消息。更具体地说,计划是在App Service plan下运行azure功能,而不是消费计划(b/c您对消费计划几乎没有控制权),并设置扩展规则以监控队列,最多N个实例(VM)。此设置允许我们将每个虚拟机专用于一次运行一个azure function应用程序实例,最多可运行N个虚拟机Azure functions 在本地运行时,带有QueueTrigger的Azure函数(.Net Core上的v2)不支持BatchSize,azure-functions,azure-functions-runtime,queuetrigger,Azure Functions,Azure Functions Runtime,Queuetrigger,我正在使用QueueTrigger在host.json文件中使用以下配置在本地测试Azure函数(v2针对.Net核心) “队列”:{ “批量大小”:1, “newBatchThreshold”:0 } 目的是限制每个函数应用程序实例一次只处理一个队列消息 根据, 如果要最小化函数应用程序中队列触发函数的并行执行,可以将批大小设置为1。此设置仅在功能应用程序在单个虚拟机(VM)上运行时才消除并发 在host.json文件中,进行以下配置 { “队列”:{ “maxPollingInterval”
当我在本地测试时,我的azure函数总是同时从队列中获取多个MSG,即使在host.json文件中使用“BatchSize:1”配置也是如此。我想知道这是否是b/c,我正在本地Azure函数运行时测试它。我还没有在Azure中测试过这个。希望它能在Azure中正常工作。问题是“队列”没有嵌套在“扩展”下 示例:
{
"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
,就像之前将newBatchThreshold
设置为0一样。您的host.json是否遵循此形状?{“版本”:“2.0”,“扩展”:{“队列”:{“batchSize”:1,“newBatchThreshold”:0}}
(请参阅文档:)感谢您的回复。不,不是。我在“扩展”中没有“队列”部分。我不知道我需要这样做。它是{“版本”:“2.0”,“队列”:{“batchSize”:1,“newBatchThreshold”:0}。因此,我更正了它,然后重试。现在,我得到NewBatchThreadhold上的ArgumentOutOfRangeException为0。该异常发生在Microsoft.Azure.WebJobs.Host.QueuesOptions类中。此外,我尝试了“newBatchThreshold:1”而不是0,并确认它一次处理2个队列msg,如预期的那样。是的,就是这样。我使用的是Microsoft.Azure.WebJobs.Extensions.Storage v3.0.0。当我将其更新到v3.0.2,并将“newBatchThreshold”设置为0时,它按预期工作,即一次仅处理1个队列msg。