https://github.com/JeremyLikness/serverless-url-shortener/blob/master/functionApp/UrlIngest/run.csx
Я столкнулся с несколькими проблемами параллелизма с проектом сокращения URL, который я видел в сообщении в блоге (https://blog.jeremylikness.com/build-a-serverless-link-shortener-with-analytics-faster-than-finishing-your-latte-8c094bb1df2c)
Я связал.Функция сценария csx / C #. Существуют проблемы, связанные с параметром «keyTable», который является записью в таблице Azure с ключом раздела: «KEY» и int Id, который увеличивается на единицу при каждом запросе. При наличии нескольких вызовов «UrlIngest ", это может привести к сбою, когда несколько экземпляров функции пытаются вставить одну и ту же строку в таблицу Azure.
Я хочу попробовать выполнить цикл повторных попыток, где в случае сбоя я возьму 'keyTable 'из хранилища снова, увеличьте его и попробуйте снова, но я не совсем уверен, как это сделать. Вот пример кода, который я добавил. Он не будет работать, потому что я не могу выполнить преобразование между keyTable иa 'NextId'
for (var i = 0; i < 10; i++) {
// Retry loop
try {
var operation = TableOperation.Replace(keyTable);
await tableOut.ExecuteAsync(operation);
break;
}
catch (Exception e) {
log.Info($"got exception replacing keyTable. attempt {i}.");
var retrieve = TableOperation.Retrieve<NextId>("1", "KEY");
keyTable = await tableOut.ExecuteAsync(retrieve);
keyTable++;
}
}
log.Info($"Done.");
return req.CreateResponse(HttpStatusCode.OK, result);
}