4

我正在本地使用 QueueTrigger 在 host.json 文件中使用以下配置测试我的 Azure 功能(v2 目标 .Net Core)

“队列”:{“batchSize”:1,“newBatchThreshold”:0}

目的是限制每个 Function App 实例一次只处理一个队列消息。

根据这个 Azure 函数文档

如果要最小化函数应用中队列触发函数的并行执行,可以将批处理大小设置为 1。只有当函数应用在单个虚拟机 (VM) 上运行时,此设置才会消除并发。

在 host.json 文件中,有这些配置

{“队列”:{“maxPollingInterval”:2000,“visibilityTimeout”:“00:00:30”,“batchSize”:16,“maxDequeueCount”:5,“newBatchThreshold”:8}}

在我们的例子中,我并不是要消除并发性,而是要确保每个函数应用程序实例一次只处理一个队列消息。然后,如果我们横向扩展函数应用以在多个 VM 上运行,则可以保证每个 VM 一次只处理一个队列 msg。更具体地说,计划是在App Service计划下运行azure功能,而不是Consumption计划(b/c您对Consumption计划几乎没有控制权),并设置Scale Out规则来监控队列,最多N 个实例 (VM)。此设置允许我们将每个 VM 专用于一次运行一个 Azure Function App 实例,最多可运行 N 个 VM。

当我在本地对此进行测试时,我的天蓝色函数总是同时从队列中获取多个消息,即使在 host.json 文件中使用“BatchSize:1”配置也是如此。我想知道是否是 b/c 我正在本地 Azure 函数运行时测试它。我尚未在 Azure 中对此进行测试。希望它在 Azure 中按预期工作。

4

1 回答 1

7

问题原来是“队列”没有嵌套在“扩展”下

例子:

{
    "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在这种情况下也应该是,因为之前有一个设置为 0的错误。newBatchThreshold

于 2018-12-05T19:43:46.993 回答