Я тестирую свою функцию Azure (v2 для .Net Core) локально с QueueTrigger со следующими конфигами в файле host.json
"queues": {"batchSize": 1, "newBatchThreshold": 0}
Цель состоит в том, чтобы ограничить каждый экземпляр приложения-функции только обработкой одной очереди сообщений за раз.
Согласно этой функции Azure doc ,
Если вы хотите минимизировать параллельное выполнение для функций, запускаемых очередями, в приложении функций, вы можете установить размер пакета равным 1. Этот параметр исключает параллелизм только до тех пор, пока ваше приложение функций работает на одной виртуальной машине (ВМ).
В файле host.json есть эти конфиги
{"queues": {"maxPollingInterval": 2000, "visibilityTimeout": "00:00:30", "batchSize ": 16," maxDequeueCount ": 5," newBatchThreshold ": 8}}
В нашем случае я не пытаюсь устранить параллелизм, но я стараюсь убедиться, что каждый экземпляр приложения-функции будет толькообрабатывать одну очередь сообщений за раз.Затем, если мы масштабируем приложение функции для запуска на нескольких виртуальных машинах, каждая виртуальная машина гарантированно обрабатывает только одну очередь сообщений за раз.Чтобы быть более точным, план состоит в том, чтобы запустить функцию Azure в плане обслуживания приложений вместо плана потребления (т.к. у вас очень мало контроля над планом потребления) и установить правило масштабирования для контроля очереди, доN количество экземпляров (ВМ).Эта настройка позволяет нам выделять каждую ВМ для запуска ОДНОГО экземпляра приложения-функции Azure за раз, до N ВМ.
Когда я тестирую это локально, моя функция Azure всегда получает несколько сообщений из очереди в очереди.в то же время, даже с конфигурацией «BatchSize: 1» в файле host.json.Мне интересно, если это ч / б, я проверяю это во время выполнения локальной функции Azure.Я еще не проверял это в Azure.Надеюсь, в Azure все работает как положено.