Azure функции иногда запускают несколько экземпляров при снятии очереди - PullRequest
0 голосов
/ 04 марта 2020

У меня есть довольно простая функция azure со следующей настройкой:

{
  "queues": {
    "maxPollingInterval": 2000,
    "visibilityTimeout": "00:10:00",
    "maxDequeueCount": 3,
    "batchSize": 12,
    "newBatchThreshold": 6
  }
}

Я иногда замечал, что когда функция завершается ошибкой, она, как и ожидалось, выводит сообщение из очереди, а затем снова пытается выполнить функцию. Проблема в том, что иногда он запускает два экземпляра одного и того же сообщения. Это известное поведение? Моя функция выглядит ниже. Должен ли я что-то сделать, прежде чем выдать исключение?

[FunctionName("MoveCopyFilesFolders")]
public static void Run([QueueTrigger("xx", Connection = "StorageConnStr")]string jobIdStr, TraceWriter log)
{
    log.Info($"MoveCopyFilesFolders processed: {jobIdStr}");

    Dictionary<string, string> properties = new Dictionary<string, string> { { "service", "xx" }, { "jobid", jobIdStr } };
    KK.Common.Instrumentation.AILogger logger = new KK.Common.Instrumentation.AILogger(configuration.ApplicationInsightsKey, properties);

    try
    {
        logger.WriteTrace($"Start moving/copy files/folders for jobid: {jobIdStr}", SeverityLevel.Verbose); 

        var jobId = Int32.Parse(jobIdStr);

        var moveCopyRepo = new CopyMoveRepository(configuration.DBConnectionString);
        var appRegRepo = new AppRegistrationRepository(configuration.DBConnectionString);

        CopyOrMoveItemsService.Run(jobId, moveCopyRepo, appRegRepo, logger);
        logger.WriteTrace("End move/copy files for site", SeverityLevel.Information);
        logger.Flush();
    }
    catch (Exception ex)
    {
        log.Info(ex.Message);
        logger.WriteException(ex);
        logger.Flush();
        throw ex;
    }          
}

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

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