我们有一个多写程序场景,其中多个进程可以写入同一个块blob。我们正在探索使用ETag进行乐观并发的选项。如果存在冲突,存储客户端将抛出异常。现在冲突很正常,因此抛出大量异常可能会降低进程的吞吐量。有没有办法识别并发更新,而不会从azure存储客户端抛出异常。
答案 0 :(得分:0)
据我所知,我们无法直接识别并发更新。 Azure存储服务检查blob是否根据etag更新。如果etag与存储服务资源的etag不相等。它将在响应中返回409错误。
我们无权更改服务器返回409错误响应。
唯一的方法是在更新blob之前,我们首先要求etag。
但是如果另一个进程更新blob,etag发生了变化,它仍然会返回409错误。
这是一种解决方法。如果您使用azure storage SDK,它提供retry method,您可以使用它来避免显示异常并将请求重新发送到azure以再次更新blob。但是azure存储仍然会向客户端返回409响应。
如果你使用rest api,我建议你可以使用try catch来捕获异常并再次重试发送rest api请求。