防止其他服务在创建时访问azure blob

时间:2015-01-22 22:13:11

标签: azure blob blobs

Azure blob API有时看起来像是由外星人设计的。就像一些非常奇特的用例一样,当大多数简单的用例需要跳过篮球时。这是一个这样的。

我有两个工人角色。一个是创建blob,另一个是处理它们(并且在处理完成后移动到"已完成"文件夹)。 blob大小可以适中,例如100 MB。显然,在blob拥有所有数据之前,我不希望第二个角色开始读取blob。好的,可以期待Lease API的帮助:获得租约,复制blob,释放租约。然后,读者也会在处理之前尝试获得租约,因此必须等待。但不,不能在尚不存在的blob上获得租约。此外,我找不到任何方法可以创建一个带有租约的blob" on"作为原子操作。

如果你知道让它发挥作用的技巧,请告诉我。真诚的。

1 个答案:

答案 0 :(得分:1)

  

显然,我不想让第二个角色开始阅读blob   blob拥有所有数据。

假设你正在创建一个BlockBlob,直到blob被提交(或者换句话说所有数据被写入blob)为所有意图和目的,blob将不存在并且不会出现在blob列表结果中(除非您在列出blob时特别要求未提交的blob)。所以我认为你不必在那里做任何特别的事。

  

好的,可以期待Lease API的帮助:获得租约,   复制blob,释放租约。然后,读者也会尝试   在处理之前获得租约,因此必须等待。

还有另一种解决方案。你可以做的是利用Azure Queues。当blob creator worker角色完成上传blob时,它只是在队列中写入一条消息,该消息将由处理blob的worker角色轮询。假设处理器工作者角色有很多实例,那么每个实例都可以GET来自此队列的消息,该消息与blob lease类似(消息仅对一个实例可用),然后开始处理blob。