Azure存储blob - 使用Etag实现乐观并发

时间:2017-05-09 06:39:52

标签: azure azure-storage azure-storage-blobs

我们有一个多写程序场景,其中多个进程可以写入同一个块blob。我们正在探索使用ETag进行乐观并发的选项。如果存在冲突,存储客户端将抛出异常。现在冲突很正常,因此抛出大量异常可能会降低进程的吞吐量。有没有办法识别并发更新,而不会从azure存储客户端抛出异常。

1 个答案:

答案 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请求。