运行LOCALLY

时间:2018-12-05 17:29:48

标签: azure-functions azure-functions-runtime queuetrigger

我正在使用host.json文件中的以下配置在本地使用QueueTrigger测试我的Azure函数(面向.Net Core的v2)

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

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

根据this Azure function doc

  

如果要最大程度地减少功能应用程序中队列触发功能的并行执行,可以将批处理大小设置为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中按预期工作。

1 个答案:

答案 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 bugnewBatchThreshold设置为0。