Chu*_*uck 4 azure-functions azure-functions-runtime queuetrigger
我正在使用 host.json 文件中的以下配置在本地使用 QueueTrigger 测试我的 Azure 功能(面向 .Net Core 的 v2)
“队列”:{“batchSize”:1,“newBatchThreshold”:0}
目的是限制每个 Function App 实例一次只能处理一个队列 msg。
如果要最大程度地减少函数应用中队列触发函数的并行执行,可以将批处理大小设置为 1。此设置仅在函数应用在单个虚拟机 (VM) 上运行时消除并发。
在 host.json 文件中,有这些配置
{ "queues": { "maxPollingInterval": 2000, "visibilityTimeout": "00:00:30", "batchSize": 16, "maxDequeueCount": 5, "newBatchThreshold": 8 } }
在我们的例子中,我不是要消除并发性,而是要确保每个函数应用实例一次只能处理一个队列 msg。然后,如果我们横向扩展函数应用程序以在多个 VM 上运行,则保证每个 VM 一次仅处理一个队列 msg。更具体地说,计划是在应用服务计划下运行azure功能,而不是消耗计划(b/c你对消耗计划的控制很少),并设置Scale Out规则来监控队列,最多N 个实例 (VM)。这种设置允许我们让每个 VM 一次运行一个 azure 函数应用程序实例,最多 N 个 VM。
当我在本地测试时,我的 azure 函数总是同时从队列中获取多个消息,即使在 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
引用的扩展名 (Microsoft.Azure.WebJobs.Extensions.Storage也应该至少3.0.1在这种情况下,因为之前有一个设置newBatchThreshold为 0的错误。
| 归档时间: |
|
| 查看次数: |
2492 次 |
| 最近记录: |