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"))));
和
我只是试图使用CloudAppendBlob.CreateOrReplace
创建一个追加blob,我注意到的是,这不会返回AppendBlobCommittedBlockCount
,这就是为什么这个属性的值仍然为null
(默认值)。
要填充这个值,您需要再次获取blob的属性。请在创建blob后添加以下代码行,您应该在那里看到一个非空值:
_appendBlob.FetchAttributes();
所以你的代码应该是:
_appendBlob = container.GetAppendBlobReference($"{folderName}/{appendBlobReference}-{currentDate.ToString("yyyyMMddHHmm")}");
_appendBlob.CreateOrReplace();
_appendBlob.FetchAttributes();