Azure Storage Queue - initialVisibilityDelay
Ola pessoALL,
Tudo bom? Esses dias durante uma discussão com o time para resolvermos um problema, nos deparamos com um problema interessante.
Quem trabalha ou ja trabalhou comigo sabe que sou grande fã do Azure, em especial os serviços App Services e WebJobs (ou Functions, são quase o mesmo)
Quando usamos Storage Queues para fazer a comunicação da api com os WebJobs frequentemente nos deparamos com um problema de duplicidade, para contornar isso usamos lock distribuído com o Redis, de forma simples conseguimos ignorar as mensagens eventualmente duplicadas.
Mas o problema da vez era que em um caso especial precisávamos processar uma mensagem em especial após o término do lock e a maneira mais simples de fazermos isso foi usando uma propriedade muitas vezes ignorada na hora de enfileirar uma mensagem initialVisibilityDelay.
A propriedade é responsável por setar um tempo para que a mensagem esteja visível na fila para processamento, com isso podemos facilmente controlar quando vamos processar uma mensagem nova, ou considerar regras para processamento em um futuro próximo.
Mas chega de papo e vamos ao código:
var storageAccount = CloudStorageAccount.Parse(connString);
var queueClient = storageAccount.CreateCloudQueueClient();
var queue = queueClient.GetQueueReference("<name of your queue>");
var message = new CloudQueueMessage("message content goes here");
queue.AddMessage(message, initialVisibilityDelay: TimeSpan.FromDays(3));
Pronto, de forma simples podemos enfileirar mensagens para serem processadas no futuro. Para mais informações segue o link da documentação oficial:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.storage.queue.cloudqueue.addmessage?view=azure-dotnet-legacy