BatchSize не учитывается функцией Azure (v2 на.Net Core) с QueueTrigger при запуске LOCALLY

Я тестирую свою функцию Azure (v2 для.Net Core) с помощью QueueTrigger локально со следующими конфигами в файле host.json

"queues": { "batchSize": 1, "newBatchThreshold": 0 }

Цель состоит в том, чтобы ограничить каждый экземпляр приложения-функции только обработкой одной очереди сообщений за раз.

Согласно этой функции Azure док,

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

1 ответ

Решение

Проблема оказалась в том, что "очереди" не были вложены в "расширения"

Пример:

{
    "version": "2.0",
    "extensions": {
        "queues": {
            "maxPollingInterval": "00:00:02",
            "visibilityTimeout" : "00:00:30",
            "batchSize": 16,
            "maxDequeueCount": 5,
            "newBatchThreshold": 8
        }
    }
}

Ссылочное расширение (Microsoft.Azure.WebJobs.Extensions.Storage должно быть как минимум 3.0.1 для этого случая, так как ранее была ошибка с настройкой newBatchThreshold до 0.

Другие вопросы по тегам