Azure的AppendBlob's属性AppendBlobCommittedBlockCount将为null

本文关键字:属性 AppendBlobCommittedBlockCount 将为 null AppendBlob Azure | 更新日期: 2023-09-27 18:15:15

我正在写(使用。net)到一个蔚蓝的AppendBlob,我想检查之前,我追加任何东西,如果我已经达到了块的最大数量,我被允许追加。我读到极限是50k,所以我将使用这个数字。为此,我尝试了这个

public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
{
    foreach (var message in messages)
    {
        try
        {
            if (_appendBlob.Properties.AppendBlobCommittedBlockCount == _maximumBlockNumberPerBlob)
            {
                CreateBlob(null);
            }
            ProcessMessage(message);
        }
        catch (Exception ex)
        {
            _log.Error("Failed Processing Message", ex);
        }
    }
    await context.CheckpointAsync();
}

但是AppendBlobCommittedBlockCount总是作为空来,CreateBlob方法只是创建一个新的blob(它需要那个可疑的空参数,因为我正在使用Timer类来调用它)。知道为什么会发生这种情况吗?如果不是这样,我该如何检查呢?

感谢更新:

CreateBlob方法如下:

public void CreateBlob(object _)
{
    var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccount"));
    var appendBlobReference = CloudConfigurationManager.GetSetting("appendBlobReference");
    var blobClient = storageAccount.CreateCloudBlobClient();
    var currentDate = DateTime.UtcNow;
    var container = blobClient.GetContainerReferenc("testContainer");
    container.CreateIfNotExists();
    _appendBlob = container.GetAppendBlobReference($"{folderName}/{appendBlobReference}-{currentDate.ToString("yyyyMMddHHmm")}");
    _appendBlob.CreateOrReplace();
}

是_appendBlob的私有字段和文件夹名称和appendBlobReference只是字符串

所有这些方法都在实现IEventProcessor的类中,因为它用于从EventHubs获取事件,所以基本上任务ProcessEvenstAsync在流中有新内容时被调用。

同样,我第一次调用CreateBlob是在使用计时器实现IEventProcessor的类的构造函数中(因为我将每15分钟创建一个新的,而不管它是否满了)。

_timer = new Timer(CreateBlob, null, TimeSpan.FromMilliseconds(0), TimeSpan.FromMinutes(int.Parse(CloudConfigurationManager.GetSetting("updateBlobNameIntervalInMinutes"))));

Azure的AppendBlob's属性AppendBlobCommittedBlockCount将为null

我只是试图使用CloudAppendBlob.CreateOrReplace创建一个追加blob,我注意到的是,这不会返回AppendBlobCommittedBlockCount,这就是为什么这个属性的值仍然为null(默认值)。

要填充这个值,您需要再次获取blob的属性。请在创建blob后添加以下代码行,您应该在那里看到一个非空值:

        _appendBlob.FetchAttributes();
所以你的代码应该是:
_appendBlob = container.GetAppendBlobReference($"{folderName}/{appendBlobReference}-{currentDate.ToString("yyyyMMddHHmm")}");
    _appendBlob.CreateOrReplace();
    _appendBlob.FetchAttributes();