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