Ограничение Azure Функции Скорость приема сообщения шины обслуживания - PullRequest
0 голосов
/ 15 апреля 2020

Предположим, у нас есть следующий сценарий:

  • Очередь служебной шины с 10 000 сообщений
  • Azure Функции (в плане потребления) с функцией, настроенной в качестве триггера для SB Очередь
  • Внешняя (вне нашего контроля) система, которая не может пройти определенную частоту запросов

Если я ставлю эти 10k сообщений в очередь так быстро, как могу, внешняя система не в состоянии справиться с параллельной нагрузкой. Я не знаю, сколько экземпляров функций или экземпляров службы приложений (" scale out ") Azure выполняется одновременно для обработки этих сообщений.

Вот пример кода как выглядит определение моей функции:

public class MyQueueProcessor
{
    private IMyDependency MyDependency { get; }

    public MyQueueProcessor(IMyDependency myDependency)
    {
        MyDependency = myDependency;
    }

    [FunctionName(nameof(MyQueueProcessor))]
    public async Task Run([ServiceBusTrigger("my-queue-name", Connection = "MyQueueConnection")] string item, ILogger log)
    {
        var req = JsonConvert.DeserializeObject<MyQueueRequest>(item);

        log.LogInformation($"Beginning processing of " + req);

        // Valudate req
        // Call external service REST API
        await MyDependency.CallService(req, new { otherParameters = true });

        log.LogInformation($"Finished processing of " + req);
    }
}

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

Как я могу ограничить количество одновременных функций, которые используют сообщения из моей очереди?

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