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