【问题标题】:Azure Blob Lease and releaseAzure Blob 租赁和发布
【发布时间】:2012-11-01 12:18:58
【问题描述】:
string uri = "myurl";
string blobstatus = GetBlobStatus(uri);
if (blobstatus != LeaseStatus.Locked.ToString())
{
    string response = AquireBlob(uri);
    //process data.
    string abc = ":em";
    ReleaseBlob(response, uri);
}

以上是我在 blob 上租用和释放锁的代码。我正在寻找这种方法用于多实例工作者角色,我想在x 时间间隔之后运行特定代码,因为多个实例可以同时执行代码。

问题是我设法正确获取了LeaseId,但是当第二个实例检查 blob 租约状态时,它总是未指定。为什么会这样?有什么线索吗?

为了抢先一步,我点击了以下链接。

Leasing Windows Azure Blobs Using the Storage Client Library - blog.smarx.com

【问题讨论】:

  • 您使用的是什么版本的存储客户端库?您是否还在针对存储模拟器执行代码?
  • 库的版本是 1.7 .. 模拟器是指开发存储吗?不,我在云存储上运行。
  • Windows Azure Storage 2.0 现已推出,它具有对租赁的本机支持。您不必包含 Smarx 代码。 blogs.msdn.com/b/windowsazurestorage/archive/2012/10/29/…

标签: c# .net azure azure-storage


【解决方案1】:

我认为您的方法不应该依赖于首先检查 blob 状态,然后根据该状态决定是否获取租约。您应该始终尝试获取租约并捕获该过程中引发的异常。这样,如果这段代码在多实例环境中运行,则只有一个实例能够获得租约(其他实例只会抛出错误)。

【讨论】:

  • 对!先测试是一种反模式,比如if (file.exists) delete(file)。它为您的代码添加了竞争条件。尝试获取租约并处理失败。
【解决方案2】:

好建议..我解决了这个问题。发现实际上 LeaseStatus 属性不好并且从不返回结果。 我必须通过输入网络请求来获取状态,然后我才能得到正确的结果。

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2023-02-21
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多