Opret og administrer Azure Queue Storage og meddelelser ved hjælp af .NET
I dette undermodul dækker vi, hvordan du opretter køer og administrerer meddelelser i Azure Queue Storage ved at vise kodestykker fra et .NET-projekt.
Kodeeksemplerne er afhængige af følgende NuGet-pakker:
- Azure.Core-bibliotek til .NET: Denne pakke indeholder delte primitiver, abstraktioner og hjælpere til moderne .NET Azure SDK-klientbiblioteker.
- Azure.Storage.Common-klientbibliotek til .NET-: Denne pakke leverer infrastruktur, der deles af de andre Azure Storage-klientbiblioteker.
- Azure.Storage.Queues-klientbibliotek til .NET-: Denne pakke gør det muligt at arbejde med Azure Queue Storage til lagring af meddelelser, som en klient har adgang til.
- biblioteket System.Configuration.ConfigurationManager til .NET: Denne pakke giver adgang til konfigurationsfiler til klientprogrammer.
Opret køtjenesteklienten
Klassen QueueClient giver dig mulighed for at hente køer, der er gemt i Kølager. Her er en måde at oprette tjenesteklienten på:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Opret en kø
I dette eksempel kan du se, hvordan du opretter en kø, hvis den ikke allerede findes:
// 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();
Indsæt en meddelelse i en kø
Hvis du vil indsætte en meddelelse i en eksisterende kø, skal du kalde metoden SendMessage. En meddelelse kan enten være en streng (i UTF-8-format) eller en bytematrix. Følgende kode opretter en kø (hvis den ikke findes) og indsætter en meddelelse:
// 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);
}
Smugkig på den næste meddelelse
Du kan smugkig på meddelelserne i køen uden at fjerne dem fra køen ved at kalde metoden PeekMessages. Hvis du ikke sender en værdi for parameteren maxMessages, er standarden at kigge på én meddelelse.
// 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();
}
Rediger indholdet af en meddelelse i kø
Du kan ændre indholdet af en meddelelse på stedet i køen. Hvis meddelelsen repræsenterer en arbejdsopgave, kan du bruge denne funktion til at opdatere status for arbejdsopgaven. Følgende kode opdaterer kømeddelelsen med nyt indhold og indstiller synlighedstimeoutet til at forlænge yderligere 60 sekunder. Dette gemmer den arbejdstilstand, der er knyttet til meddelelsen, og giver klienten endnu et minut til at fortsætte med at arbejde på meddelelsen.
// 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
);
}
Fjern den næste meddelelse
Dequeue en meddelelse fra en kø i to trin. Når du kalder ReceiveMessages, får du den næste meddelelse i en kø. En meddelelse, der returneres fra ReceiveMessages bliver usynlig for alle andre kodelæsningsmeddelelser fra denne kø. Denne meddelelse forbliver som standard usynlig i 30 sekunder. Hvis du vil fjerne meddelelsen fra køen, skal du også kalde DeleteMessage. Denne proces med to trin til fjernelse af en meddelelse sikrer, at hvis din kode ikke kan behandle en meddelelse på grund af hardware- eller softwarefejl, kan en anden forekomst af din kode få den samme meddelelse og prøve igen. Dine kodekald DeleteMessage lige efter, at meddelelsen er blevet behandlet.
// 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);
}
Hent kølængden
Du kan få et estimat af antallet af meddelelser i en kø. Metoden GetProperties returnerer køegenskaber, herunder antallet af meddelelser. Egenskaben ApproximateMessagesCount indeholder det omtrentlige antal meddelelser i køen. Dette tal er ikke lavere end det faktiske antal meddelelser i køen, men kan være højere.
/// 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}");
}
Slet en kø
Hvis du vil slette en kø og alle meddelelserne i den, skal du kalde metoden Delete på 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();
}