У меня установлена очередь на служебную шину Azure. В файле host.json у меня maxConcurrentCalls установлен в 1, однако, когда я локально отлаживаю приложение, выполняется 8-10 рабочих потоков, и это делает приложение невозможным для отладки. Как у меня работает только 1 поток, когда я отлаживаю свое приложение локально?
Первоначально мой 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 рабочих потоков, запускающихся при запуске.
Я также попытался заставить функцию вызывать синглтон
Заставить функцию Azure запускаться последовательно на ServiceBusTrigger - maxConcurrentCalls не работает
однако это просто полностью блокировало функцию и не решало никаких проблем.
[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 выполняется в нескольких рабочих потоках, что означает, что сообщение заканчивается в очереди deadletter после 1 запуска функции из-за того, что оно разделяет одно и то же сообщение по всем потокам, а не по 1 потоку, который я ожидаю из-за макс одновременных звонков. я что-то пропустил? Есть ли разница между одновременным извлечением 1 сообщения за раз и выполнением функции в нескольких потоках?