我设置了一个azure服务总线队列。在host.json文件中,我将maxConcurrentCalls设置为1,但是,当我在本地调试应用程序时,有8-10个工作线程在运行,这使得应用程序无法调试。当我在本地调试我的应用程序时,我怎么只有一个线程在运行?
最初我的host.json是空的,我找到了下面的代码,为了只有一个线程执行,我找到了下面的代码,请参阅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个工作线程启动。我还试图让函数调用一个单独的see 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个线程,因为最大并发调用数。我是不是遗漏了什么?一次并发提取一条消息和跨多个线程执行函数之间有区别吗?
发布于 2019-01-08 19:57:29
我的一个同事发现了这个错误。应用程序一次只触发一个线程。然而,在azure本身上,锁定持续时间被设置为30秒。这意味着应用程序将在30秒后启动新的线程,等等,因为消息被解锁。扩展锁已经解决了这个问题。
https://stackoverflow.com/questions/54089474
复制相似问题