Erstellen und Verwalten von Azure Queue Storage und Nachrichten mit .NET

Abgeschlossen

In dieser Lektion behandeln wir, wie Sie Warteschlangen erstellen und Nachrichten in Azure Queue Storage verwalten, indem Codeausschnitte aus einem .NET-Projekt angezeigt werden.

Die Codebeispiele basieren auf den folgenden NuGet-Paketen:

Erstellen des Warteschlangendienstclients

Mit der QueueClient-Klasse können Sie in Queue Storage gespeicherte Warteschlangen abrufen. Hier ist eine Möglichkeit, den Dienstclient zu erstellen:

QueueClient queueClient = new QueueClient(connectionString, queueName);

Warteschlange erstellen

Dieses Beispiel zeigt, wie Sie eine Warteschlange erstellen, falls noch keine vorhanden ist:

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

Einfügen einer Nachricht in eine Warteschlange

Rufen Sie die SendMessage-Methode auf, um eine Nachricht in eine vorhandene Warteschlange einzufügen. Eine Nachricht kann entweder eine Zeichenfolge (im UTF-8-Format) oder ein Bytearray sein. Der folgende Code erstellt eine Warteschlange (sofern nicht vorhanden) und fügt eine Nachricht ein:

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

Vorschau auf die nächste Nachricht

Sie können die Nachrichten in der Warteschlange anzeigen, ohne sie aus der Warteschlange zu entfernen, indem Sie die PeekMessages-Methode aufrufen. Wenn Sie keinen Wert für den maxMessages-Parameter übergeben, besteht die Standardeinstellung darin, eine Nachricht anzuzeigen.

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

Ändern des Inhalts einer in die Warteschlange eingereihten Nachricht

Sie können den Inhalt einer Nachricht direkt in der Warteschlange ändern. Wenn die Nachricht eine Arbeitsaufgabe darstellt, können Sie dieses Feature verwenden, um den Status der Arbeitsaufgabe zu aktualisieren. Der folgende Code aktualisiert die Warteschlangennachricht mit neuem Inhalt und legt das Zeitlimit für die Sichtbarkeit fest, um weitere 60 Sekunden zu verlängern. Dadurch wird der Arbeitsstatus gespeichert, der der Nachricht zugeordnet ist, und dem Client wird eine weitere Minute zugewiesen, um mit der Arbeit an der Nachricht fortzufahren.

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

Entfernen der nächsten Nachricht aus der Warteschlange

Entfernen Sie eine Nachricht aus einer Warteschlange in zwei Schritten. Wenn Sie ReceiveMessagesanrufen, wird die nächste Nachricht in einer Warteschlange angezeigt. Die Nachricht, die von ReceiveMessages zurückgegeben wird, wird für anderen Code, der Nachrichten aus dieser Warteschlange liest, unsichtbar. Diese Nachricht bleibt standardmäßig 30 Sekunden lang unsichtbar. Um das Entfernen der Nachricht aus der Warteschlange abzuschließen, müssen Sie auch DeleteMessageanrufen. Dieser zweistufige Prozess zum Entfernen von Nachrichten stellt sicher, dass eine andere Codeinstanz dieselbe Nachricht erneut abrufen kann, falls die Verarbeitung aufgrund eines Hardware- oder Softwarefehlers fehlschlägt. Ihr Code ruft DeleteMessage direkt nach der Verarbeitung der Nachricht auf.

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

Erhalte die Warteschlangenlänge

Sie können die Anzahl der Nachrichten in einer Warteschlange schätzen lassen. Die Methode GetProperties gibt Warteschlangeneigenschaften einschließlich der Nachrichtenanzahl zurück. Die ApproximateMessagesCount-Eigenschaft enthält die ungefähre Anzahl der Nachrichten in der Warteschlange. Diese Anzahl ist nicht kleiner als die tatsächliche Anzahl der Nachrichten in der Warteschlange, kann aber größer sein.

/// 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}");
}

Eine Warteschlange löschen

Um eine Warteschlange und alle darin enthaltenen Nachrichten zu löschen, rufen Sie die Delete-Methode für das Warteschlangenobjekt auf.

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