Skapa och hantera Azure Queue Storage och meddelanden med hjälp av .NET
I den här lektionen går vi igenom hur du skapar köer och hanterar meddelanden i Azure Queue Storage genom att visa kodfragment från ett .NET-projekt.
Kodexemplen förlitar sig på följande NuGet-paket:
- Azure.Core-bibliotek för .NET: Det här paketet innehåller delade primitiver, abstraktioner och hjälpfunktioner för moderna .NET Azure SDK-klientbibliotek.
- Azure.Storage.Common-klientbibliotek för .NET: Det här paketet tillhandahåller infrastruktur som delas av de andra Azure Storage-klientbiblioteken.
- Azure.Storage.Queues-klientbibliotek för .NET: Med det här paketet kan du arbeta med Azure Queue Storage för att lagra meddelanden som en klient har åtkomst till.
- System.Configuration.ConfigurationManager-bibliotek för .NET: Det här paketet ger åtkomst till konfigurationsfiler för klientprogram.
Skapa Queue-tjänstklienten
Med QueueClient
klassen kan du hämta köer som lagras i Kölagring. Här är ett sätt att skapa tjänstklienten:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Skapa en kö
Det här exemplet visar hur du skapar en kö om den inte redan finns:
// 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();
Infoga ett meddelande i en kö
Om du vill infoga ett meddelande i en befintlig kö anropar du SendMessage
metoden. Ett meddelande kan vara antingen en sträng (i UTF-8-format) eller en bytematris. Följande kod skapar en kö (om den inte finns) och infogar ett meddelande:
// 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);
}
En titt på nästa meddelande
Du kan titta på meddelandena i kön utan att ta bort dem från kön genom att anropa PeekMessages
metoden. Om du inte skickar ett värde för parametern maxMessages
är standardvärdet att titta på ett meddelande.
// 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();
}
Ändra innehållet i ett meddelande i kön
Du kan ändra innehållet i ett meddelande direkt i kön. Om meddelandet representerar en arbetsuppgift kan du använda den här funktionen för att uppdatera arbetsuppgiftens status. Följande kod uppdaterar kömeddelandet med nytt innehåll och utökar tidsgränsen för visning med ytterligare 60 sekunder. Koden sparar statusen för arbetsuppgiften som associeras med meddelandet och ger klienten ytterligare en minut att fortsätta arbeta med meddelandet.
// 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
);
}
Avmarkera nästa meddelande
Avmarkera ett meddelande från en kö i två steg. När du anropar ReceiveMessages
får du nästa meddelande i en kö. Ett meddelande som returneras från ReceiveMessages
blir osynligt för andra kodläsningsmeddelanden från den här kön. Som standard är det här meddelandet osynligt i 30 sekunder. Om du vill slutföra borttagningen av meddelandet från kön måste du även anropa DeleteMessage
. Den här tvåstegsprocessen för att ta bort ett meddelande säkerställer att om din kod inte kan bearbeta ett meddelande på grund av ett maskin- eller programvarufel så kan en annan instans av koden hämta samma meddelande och försöka igen. Koden anropar DeleteMessage
direkt efter att meddelandet har bearbetats.
// 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);
}
Hämta kölängden
Du kan hämta en uppskattning av antalet meddelanden i en kö. Metoden GetProperties
returnerar köegenskaper inklusive antalet meddelanden. Egenskapen ApproximateMessagesCount
innehåller det ungefärliga antalet meddelanden i kön. Det här talet är inte lägre än det faktiska antalet meddelanden i kön, men kan vara högre.
/// 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}");
}
Ta bort en kö
Om du vill ta bort en kö och alla meddelanden som finns i den anropar Delete
du metoden för köobjektet.
/// 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();
}