这是我第一次使用 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