Azure 函数服务总线触发器:如何停止事件流中的数据批次,并且一次只允许队列中的一条消息



这是我第一次使用 Azure 函数和服务总线。

我正在尝试在 Visual Studio 中构建一个函数应用程序,并且能够连接到队列主题(我无法控制(。问题是每次启用断点时,VS 都会一次处理 10 条消息,这使得本地测试非常困难(更不用说数据库池引起的问题了(。

如何确保在我点击完成之前一次只处理 1 条消息?

public static void Run([ServiceBusTrigger("xxx", "yyy", AccessRights.Manage)]BrokeredMessage msg, TraceWriter log)
{
     // do something here for one message at a time.
}

在 host.json 中将 maxConcurrentCalls 设置为 1。您还可以从 Azure 函数的 host.json 参考中获取答案

maxConcurrentCalls 16 消息泵应启动的对回调的最大并发调用数。默认情况下,函数运行时同时处理多条消息。要指示运行时一次仅处理单个队列或主题消息,请将 maxConcurrentCalls 设置为 1

对于函数应用 2.0,需要按如下所示更新host.json

{
  "version": "2.0",
  ...
  "extensions": {
    "serviceBus": {
      "messageHandlerOptions": {
        "maxConcurrentCalls": 1
      }
    }
  }
}

由于host.json文件通常与函数本身一起发布到 Azure,因此最好不要出于调试和开发目的对其进行修改。对 host.json 的任何更改都可以改为local.settings.json

以下是将 maxConcurrentCalls 设置为 1 的方法:

{
  "IsEncrypted": false,
  "Values": {
    ...
    "AzureFunctionsJobHost:Extensions:ServiceBus:MessageHandlerOptions:MaxConcurrentCalls": 1
  }
}

此覆盖功能如下所述:https://learn.microsoft.com/en-us/azure/azure-functions/functions-host-json#override-hostjson-values

最新更新