Créer et gérer le stockage file d’attente Azure et les messages à l’aide de .NET
Dans cette unité, nous allons apprendre à créer des files d’attente et à gérer des messages dans Stockage File d’attente Azure en affichant des extraits de code à partir d’un projet .NET.
Les exemples de code s’appuient sur les packages NuGet suivants :
- bibliothèque Azure.Core pour .NET: ce package fournit des primitives partagées, des abstractions et des assistances pour les bibliothèques clientes du SDK Azure .NET modernes.
- bibliothèque de client Azure.Storage.Common pour .NET: ce package fournit une infrastructure partagée par les autres bibliothèques clientes stockage Azure.
- bibliothèque cliente Azure.Storage.Queues pour .NET: ce package permet d’utiliser le stockage file d’attente Azure pour stocker les messages accessibles par un client.
- bibliothèque System.Configuration.ConfigurationManager pour .NET: ce package fournit l’accès aux fichiers de configuration pour les applications clientes.
Créer le client du service file d’attente
La classe QueueClient
vous permet d'extraire les files d’attente stockées dans le stockage des files d'attente. Voici un moyen de créer le client de service :
QueueClient queueClient = new QueueClient(connectionString, queueName);
Créer une file d’attente
Cet exemple montre comment créer une file d’attente si elle n’existe pas déjà :
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue
queueClient.CreateIfNotExists();
Insérer un message dans une file d’attente
Pour insérer un message dans une file d’attente existante, appelez la méthode SendMessage
. Un message peut être une chaîne (au format UTF-8) ou un tableau d’octets. Le code suivant crée une file d’attente (s’il n’existe pas) et insère un message :
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue if it doesn't already exist
queueClient.CreateIfNotExists();
if (queueClient.Exists())
{
// Send a message to the queue
queueClient.SendMessage(message);
}
Aperçu du message suivant
Vous pouvez consulter les messages de la file d’attente sans les supprimer de la file d’attente en appelant la méthode PeekMessages
. Si vous ne transmettez pas de valeur pour le paramètre maxMessages
, la valeur par défaut consiste à afficher un message.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Peek at the next message
PeekedMessage[] peekedMessage = queueClient.PeekMessages();
}
Modifier le contenu d’un message mis en file d’attente
Vous pouvez modifier le contenu d’un message sur place dans la file d’attente. Si le message représente une tâche de travail, vous pouvez utiliser cette fonctionnalité pour mettre à jour l’état de la tâche de travail. Le code suivant met à jour le message de file d’attente avec un nouveau contenu et définit le délai d’expiration de visibilité pour étendre une autre durée de 60 secondes. Cela enregistre l’état du travail associé au message et donne au client une minute pour continuer à travailler sur le message.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the message from the queue
QueueMessage[] message = queueClient.ReceiveMessages();
// Update the message contents
queueClient.UpdateMessage(message[0].MessageId,
message[0].PopReceipt,
"Updated contents",
TimeSpan.FromSeconds(60.0) // Make it invisible for another 60 seconds
);
}
File d’attente du message suivant
Retirer un message d’une file d’attente en deux étapes. Lorsque vous appelez ReceiveMessages
, vous recevez le message suivant dans une file d’attente. Un message retourné par ReceiveMessages
devient invisible à tout autre code qui lit les messages de cette file d’attente. Par défaut, ce message reste invisible pendant 30 secondes. Pour terminer la suppression du message de la file d’attente, vous devez également appeler DeleteMessage
. Ce processus en deux étapes de suppression d’un message garantit que si votre code ne parvient pas à traiter un message en raison d’une défaillance matérielle ou logicielle, une autre instance de votre code peut obtenir le même message et réessayer. Votre code appelle DeleteMessage
juste après le traitement du message.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the next message
QueueMessage[] retrievedMessage = queueClient.ReceiveMessages();
// Process (i.e. print) the message in less than 30 seconds
Console.WriteLine($"Dequeued message: '{retrievedMessage[0].Body}'");
// Delete the message
queueClient.DeleteMessage(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
}
Obtenir la longueur de la file d’attente
Vous pouvez obtenir une estimation du nombre de messages dans une file d’attente. La méthode GetProperties
retourne les propriétés de file d’attente, y compris le nombre de messages. La propriété ApproximateMessagesCount
contient le nombre approximatif de messages dans la file d’attente. Ce nombre n’est pas inférieur au nombre réel de messages dans la file d’attente, mais peut être plus élevé.
/// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
QueueProperties properties = queueClient.GetProperties();
// Retrieve the cached approximate message count.
int cachedMessagesCount = properties.ApproximateMessagesCount;
// Display number of messages.
Console.WriteLine($"Number of messages in queue: {cachedMessagesCount}");
}
Supprimer une file d’attente
Pour supprimer une file d’attente et tous les messages contenus dans celui-ci, appelez la méthode Delete
sur l’objet file d’attente.
/// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Delete the queue
queueClient.Delete();
}