https://github.com/JeremyLikness/serverless-url-shortener/blob/master/functionApp/UrlIngest/run.csx
我在博客文章(https://blog.jeremylikness.com/build-a-serverless-link-shortener-with-analytics-faster-than-finishing-your-latte-8c094bb1df2c)中看到的URL缩短项目遇到了一些并发问题
我已经链接了.csx / C#脚本函数。由于“ keyTable”参数是Azure表中的一个条目,该问题具有分区键:“ KEY”,并且每个请求的增量ID都存在问题。当多次调用“ UrlIngest”函数时,当多个函数实例尝试将同一行插入到Azure表中时,这可能会导致失败。
我想尝试执行“重试循环”,如果发生故障,我将从存储中再次获取“ keyTable”,对其进行递增,然后重试,但是我不确定如何执行此操作。这是我添加的代码示例。它将无法正常工作,因为我无法在keyTable和'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);
}