Я хранил сообщения от разных устройств в формате 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?
}
}
}
}
}
}
}
}
Над кодом, способным найти сообщение на основе идентификатора сообщения, нокак мне удалить это сейчас? reader
может не помочь в удалении!
Примечание. Я не хочу удалять весь blob
, поскольку он может содержать сообщения от других работающих устройств.