我在host.json中将batchSize设置为1,但是当我在本地运行该函数(QueueTrigger输入)时,我从队列中收到了许多消息,而它应该仅为1。
主机.json:
{
"version": "2.0",
"extensions": {
"queues": {
"maxPollingInterval": "00:00:02",
"visibilityTimeout": "00:00:30",
"batchSize": 1,
"maxDequeueCount": 5,
"newBatchThreshold": 8,
"messageEncoding": "base64"
}
}
}
即使在控制台窗口日志中也显示
"BatchSize": 1
。
为什么这个设置被忽略?据我了解,它应该在本地和部署时应用。
当我删除host.json设置并覆盖
local.settings.json
中的batchSize值时,它就可以工作了:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName={MyDevAccount};AccountKey={MyAccKey};EndpointSuffix=core.windows.net",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"AzureFunctionsJobHost__extensions__queues__batchSize": 1
}
}
现在,即使我的存储队列有很多消息,我也只收到 1 条消息。
但是当我再次在host.json中定义
batchSize
时,它甚至忽略了local.settings.json中的覆盖。
这是一个错误,还是我错过了什么?如果我想为云自定义batchSize,但在本地将其保留为1,该怎么办?
host.json 中的batchSize 在本地被忽略
当您在本地运行时,它会从 local.setting.json 获取值,这就是为什么它只能使用它:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"AzureFunctionsJobHost__extensions__queues__batchSize": 1
}
}
感谢@Andrew,我确实同意需要将
newBatchThreshold
保留为 0 或完全删除它以避免批量并行处理。
如果我想为云自定义batchSize,但在本地保留为1,该怎么办
或者,您可以在环境变量部分添加(与本地 local.setting.json 相同):
您可以通过更改上述值来自定义该值。