我设置了一个天蓝色的服务总线队列。在host.json文件中,我将maxConcurrentCalls设置为1,但是当我在本地调试应用程序时,正在运行8-10个工作线程,这使应用程序无法调试。在本地调试应用程序时,如何仅运行1个线程?
最初,我的host.json为空,我发现下面的代码应该只执行1个线程,请参见https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#host-json
{
"version": "2.0",
"extensions": {
"serviceBus": {
"prefetchCount": 100,
"messageHandlerOptions": {
"autoComplete": false,
"maxConcurrentCalls": 1,
"maxAutoRenewDuration": "00:55:00"
}
}
}
}
我将host.json设置添加到我的local.json设置中无济于事,我仍然有10个工作线程在启动时启动。 我也试图使函数调用单例 Make Azure Function run sequential on ServiceBusTrigger - maxConcurrentCalls not working 但是,这只是完全锁定了功能,根本没有解决任何问题。
[FunctionName("ReadFromXCagoIssueQueueAndRetrieveFiles")]
public static void Run([ServiceBusTrigger(QueueName, AccessRights.Manage, Connection = "SBConnection")]BrokeredMessage myQueueItem, TextWriter log)
{
log.WriteLine($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
var propIssueId = myQueueItem.Properties["IssueId"].ToString();
var issueId = int.Parse(propIssueId);
log.WriteLine($"begin grab files for issue: {issueId}");
retrieveIssueEPub(issueId);
}
retrieveIssueEPub的执行是在几个工作线程上执行的,这意味着该消息在函数运行1次后最终在死信队列中结束,因为该消息将同一条消息分配给所有线程,而不是我期望的1个线程最大并发调用数。我想念什么吗?一次同时提取1条消息和在多个线程上执行该函数之间有区别吗?
答案 0 :(得分:0)
我的一位同事发现了错误。 该应用程序一次仅触发一个线程。但是,天蓝色本身的锁定持续时间设置为30秒。 这意味着该应用将在30秒等之后启动新线程,因为该消息已解锁。 扩展锁已解决了该问题。