Créer et gérer le stockage file d’attente Azure et les messages à l’aide de .NET

Effectué

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 :

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();
}