Erstellen und Verwalten von Azure Queue Storage und Nachrichten mit .NET
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:
- Azure.Core-Bibliothek für .NET-: Dieses Paket stellt freigegebene Grundtypen, Abstraktionen und Hilfsprogramme für moderne .NET Azure SDK-Clientbibliotheken bereit.
- Azure.Storage.Common-Clientbibliothek für .NET-: Dieses Paket stellt die Infrastruktur bereit, die von den anderen Azure Storage-Clientbibliotheken gemeinsam genutzt wird.
- Azure.Storage.Queues-Clientbibliothek für .NET: Dieses Paket ermöglicht das Arbeiten mit Azure Queue Storage zum Speichern von Nachrichten, auf die von einem Client zugegriffen wird.
- System.Configuration.ConfigurationManager-Bibliothek für .NET-: Dieses Paket bietet Zugriff auf Konfigurationsdateien für Clientanwendungen.
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();
}