host.json 中的batchSize 在本地被忽略

问题描述 投票:0回答:1

我在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,该怎么办?

azure azure-functions azure-functions-core-tools
1个回答
0
投票

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 相同):

enter image description here

您可以通过更改上述值来自定义该值。

© www.soinside.com 2019 - 2024. All rights reserved.