У MaxConcurrentCalls = 0 все еще есть рабочие потоки при локальной работе с сервисной шиной Azure - PullRequest
0 голосов
/ 08 января 2019

У меня установлена ​​очередь на служебную шину 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 сообщения за раз и выполнением функции в нескольких потоках?

1 Ответ

0 голосов
/ 08 января 2019

Мой коллега обнаружил ошибку. приложение запускает только один поток за раз. Однако на самой лазуре длительность блокировки была установлена ​​на 30 секунд. Это означает, что приложение запустит новый поток через 30 секунд и т. Д., Поскольку сообщение становится разблокированным. Расширение блокировки решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...