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

时间:2018-01-25 02:05:42

标签: azure azure-functions azure-servicebus-queues

这是我第一次使用Azure功能和服务总线,所以请原谅我的无知。

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

如何确保在完成后只能处理一条消息?

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

3 个答案:

答案 0 :(得分:7)

在host.json中将maxConcurrentCalls设置为1。您也可以从host.json reference for Azure Functions

获得答案
  

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

答案 1 :(得分:1)

万一将来有人偶然发现这个问题,对于功能应用程序2.0,您需要像这样更新host.json

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

答案 2 :(得分:1)

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

下面是如何设置maxConcurrentCalls至1:

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

此倍率功能描述如下:https://docs.microsoft.com/en-us/azure/azure-functions/functions-host-json#override-hostjson-values