Azure blob API有时看起来像是由外星人设计的。就像一些非常奇特的用例一样,当大多数简单的用例需要跳过篮球时。这是一个这样的。
我有两个工人角色。一个是创建blob,另一个是处理它们(并且在处理完成后移动到"已完成"文件夹)。 blob大小可以适中,例如100 MB。显然,在blob拥有所有数据之前,我不希望第二个角色开始读取blob。好的,可以期待Lease API的帮助:获得租约,复制blob,释放租约。然后,读者也会在处理之前尝试获得租约,因此必须等待。但不,不能在尚不存在的blob上获得租约。此外,我找不到任何方法可以创建一个带有租约的blob" on"作为原子操作。
如果你知道让它发挥作用的技巧,请告诉我。真诚的。
答案 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。