当 运行 LOCALLY 时,带有 QueueTrigger 的 Azure 函数(.Net Core 上的 v2)不支持 BatchSize
BatchSize is not honored by Azure function (v2 on .Net Core) with QueueTrigger when running LOCALLY
我正在使用 host.json 文件
中的以下配置在本地使用 QueueTrigger 测试我的 Azure 函数(面向 .Net Core 的 v2)
"queues":{
"batchSize": 1,
"newBatchThreshold": 0
}
目的是限制每个 Function App 实例一次只能处理一个队列消息。
If you want to minimize parallel execution for queue-triggered functions in a function app, you can set the batch size to 1. This setting eliminates concurrency only so long as your function app runs on a single virtual machine (VM).
在host.json文件中,有这些配置
{
"queues":{
"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。
当我在本地测试时,我的 azure 函数总是同时从队列中获取多个消息,即使 host.json 文件中的 "BatchSize: 1" 配置也是如此。我想知道是不是 b/c 我在本地 Azure 函数 运行 中测试这个。我还没有在 Azure 中测试过这个。希望它在 Azure 中按预期工作。
问题原来是 "queues" 没有嵌套在 "extensions"
下
示例:
{
"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 bug 将 newBatchThreshold
设置为 0。
我正在使用 host.json 文件
中的以下配置在本地使用 QueueTrigger 测试我的 Azure 函数(面向 .Net Core 的 v2)"queues":{ "batchSize": 1, "newBatchThreshold": 0 }
目的是限制每个 Function App 实例一次只能处理一个队列消息。
If you want to minimize parallel execution for queue-triggered functions in a function app, you can set the batch size to 1. This setting eliminates concurrency only so long as your function app runs on a single virtual machine (VM).
在host.json文件中,有这些配置
{ "queues":{ "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。
当我在本地测试时,我的 azure 函数总是同时从队列中获取多个消息,即使 host.json 文件中的 "BatchSize: 1" 配置也是如此。我想知道是不是 b/c 我在本地 Azure 函数 运行 中测试这个。我还没有在 Azure 中测试过这个。希望它在 Azure 中按预期工作。
问题原来是 "queues" 没有嵌套在 "extensions"
下示例:
{
"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 bug 将 newBatchThreshold
设置为 0。