Параметры host.json игнорируются для функции приложения, запускаемой очередью служебной шины

Я пытаюсь заблокировать внутреннюю документацию для лучших практик, когда функция, запускаемая очередью, должна вызывать сторонний API, где регулирование может быть проблемой. Я следил за всей документацией, которую могу найти, будь то официальная MS, stackoverflow или из соответствующего репозитория github.

Я использовал CLI, чтобы установить functionAppScaleLimit = 1

 az resource update --resource-type Microsoft.Web/sites -g resourceGroupName -n functionAppName/config/web --set properties.functionAppScaleLimit=1

Я вручную установил для WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT значение 1 в настройках приложения.

Я проверил на портале Azure, что в настройках масштабирования приложение-функция показывает масштабирование вручную и количество экземпляров равно 1.

У меня в host.json следующее (я не использую атрибут FunctionsStartup)

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    },
    "extensions": {
      "serviceBus": {
        "prefetchCount": 1,
        "messageHandlerOptions": {
          "autoComplete": true,
          "maxConcurrentCalls": 1,
          "maxAutoRenewDuration": "00:05:00"
        },
        "sessionHandlerOptions": {
          "autoComplete": true,
          "messageWaitTimeout": "00:00:30",
          "maxAutoRenewDuration": "00:55:00",
          "maxConcurrentSessions": 1
        }
      }
    }
  }
}

Моя очередь служебной шины подключена к сеансу. Сообщения успешно обрабатываются в приложении-функции (для проверки параллелизма добавлена ​​искусственная задержка. Однако, когда я тестирую и отправляю в очередь 100 сообщений (по одному, а не в пакетном режиме, и моя функция не настроена на получение пакетных сообщений), 10 за сеанс , Я вижу, что все 10 сеансов обрабатываются одновременно. Я ожидаю увидеть одно сообщение от обработки одного сеанса в любой момент времени.

Какие-либо предложения? Я упускаю что-то очевидное?

Кстати, во время выполнения функции, если я не использую выполнение FunctionsStartup, какой самый простой способ записать в журнал все настройки, в том числе из host.json, которые фактически используются функцией?


person Fred    schedule 26.01.2021    source источник


Ответы (1)


В настоящее время структура раздела расширений, определенная в вашем host.json, находится в разделе logging, что неверно. Он должен находиться за пределами раздела logging.

Используйте приведенный ниже, который правильно определяет раздел расширений.

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingExcludedTypes": "Request",
            "samplingSettings": {
                "isEnabled": true
            }
        }
    },
    "extensions": {
        "serviceBus": {
            "prefetchCount": 1,
            "messageHandlerOptions": {
                "autoComplete": true,
                "maxConcurrentCalls": 1,
                "maxAutoRenewDuration": "00:05:00"
            },
            "sessionHandlerOptions": {
                "autoComplete": true,
                "messageWaitTimeout": "00:00:30",
                "maxAutoRenewDuration": "00:55:00",
                "maxConcurrentSessions": 1
            }
        }
    }
}

Обратитесь к this, чтобы узнать о хосте. ссылки json.

person user1672994    schedule 27.01.2021
comment
Это та часть истории, где задающий вопрос чувствует себя глупо после того, как другая пара глаз смотрит на его глупую простую проблему и говорит: «Эй, мерзавец! : D lol. Спасибо. Мне казалось, что это должно быть просто, но я просто этого не видел. - person Fred; 27.01.2021
comment
Такое бывает со всеми когда-нибудь :) - person user1672994; 27.01.2021