Azure functions 在本地运行时,带有QueueTrigger的Azure函数(.Net Core上的v2)不支持BatchSize

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”

我正在使用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函数总是同时从队列中获取多个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。