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 kötjänstklienten
Med klassen QueueClient
kan du hämta köer som lagras i Queue Storage. 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 metoden SendMessage
. 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);
}
Titta på nästa meddelande
Du kan titta på meddelandena i kön utan att ta bort dem från kön genom att anropa metoden PeekMessages
. 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 köat meddelande
Du kan ändra innehållet i ett meddelande på plats 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 anger tidsgränsen för synlighet för att förlänga ytterligare 60 sekunder. Detta sparar tillståndet för det arbete som är associerat med meddelandet och ger klienten ytterligare en minut för 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
Ta bort ett meddelande från en kö i två steg. När du anropar ReceiveMessages
visas 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 förblir 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 koden inte kan bearbeta ett meddelande på grund av maskinvaru- eller programvarufel kan en annan instans av koden få 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 få 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 du metoden Delete
i 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();
}