4

我有一个 Azure 服务总线触发的 Azure 函数。当我在本地运行 Azure 函数时,它会启动 16 个线程并在每个线程中获取 16 条消息。我该如何配置它,使它只运行一条消息,这样我就可以调试它,而同一个断点不会被击中 16 次?

我尝试在 host.json 文件中设置配置(如下所示),以便一次只从 Azure 服务总线获取 1 条消息,但这没有帮助。

{
  "version": "2.0",
  "extensions": {
    "serviceBus": {
      "prefetchCount": 100,
      "messageHandlerOptions": {
        "autoComplete": false,
        "maxConcurrentCalls": 1,
        "maxAutoRenewDuration": "00:55:00"
      }
    }
  }
}

编辑 1:我目前所做的是通过包含正文中的消息输入的 http 请求触发函数的管理端点。这样做的问题是 http 请求正文必须包含 {"input":"{}"} 并且我每次都必须花时间使用转义的双引号创建有效的 json。如果我能够将功能配置为从服务总线主题一次运行单个消息,将会容易得多。

4

3 回答 3

0

对于队列触发的函数,host.json 应该是:

{
  "version": "2.0",
  "extensions": {
    "queues": {
      "batchSize": 1
    }
  }
}
于 2020-10-20T20:52:01.497 回答
0

原来我在运行函数时犯了一个错误(感到羞愧..)。Host.json 文件未复制到 bin 文件夹,因此无法识别。host.json 配置确实按预期工作,并将函数限制为一次处理一条消息。

于 2021-02-23T21:22:42.363 回答
0

尝试在您的local.settings.json中设置它以覆盖您的 host.json 文件。这样您就不需要更改您的 host.json,从而防止您意外提交对 host.json 的更改。

{
   "Values": { 
   "AzureFunctionsJobHost__extensions__serviceBus__messageHandlerOptions__maxConcurrentCalls": 1
   }
}

结果是您的 host.json (在运行时)将更改为此

"extensions": {
  "serviceBus": {
   "messageHandlerOptions": {
    ...
    "maxConcurrentCalls": 1 -> added setting
    ...
  }
}

}

于 2021-08-20T14:33:16.430 回答