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