我一直在存储来自不同设备的消息 Azure Blob Storage
以avro格式。
其中一个设备出了故障,结果它抛出了“垃圾”信息。现在有一个任务,搜索和删除来自特定设备的消息。因此我写了下面的代码。
循环通过每个 Blob
在一个 containers
找到信息
foreach (var container in client.ListContainers(null, ContainerListingDetails.All))
{
if (permissions.PublicAccess == BlobContainerPublicAccessType.Blob || permissions.PublicAccess == BlobContainerPublicAccessType.Container)
{
//for each blob
foreach (var blobItem in container.ListBlobs(null, true))
{
if (blobItem is CloudBlockBlob)
{
string blobname = ((CloudBlockBlob)blobItem).Name;
var blob = container.GetBlockBlobReference(blobname);
using (var myBlob = blob.OpenRead())
{
using (var reader = AvroContainer.CreateGenericReader(myBlob))
{
while (reader.MoveNext())
{
foreach (dynamic avroRecord in reader.Current.Objects)
{
var eventData = new AvroEventData(avroRecord);
var jsonString = Encoding.UTF8.GetString(eventData.Body);
JObject _json = JObject.Parse(jsonString);
//DeserializeObject and check the device ID
// if found, then delete
// but how do I delete? do I get reference here?
}
}
}
}
}
}
}
}
上面的代码,可以根据消息id找到消息,但是现在怎么删除呢? reader
可能无法帮助删除!
注意:我不想删除整个 blob
因为它可能包含来自其他工作设备的消息。
1条答案
按热度按时间sycxhyv71#
我以前也遇到过类似的问题(但不是avro格式),经过google的研究和搜索,我发现在azure中托管blob很难修改。
我的解决方案是将文件下载到本地,然后根据您的代码进行修改,最后您可以将修改后的文件上传到azure blob存储中。所有的步骤都可以通过代码来完成。
希望有帮助。