Opprette og administrere Azure Queue Storage og meldinger ved hjelp av .NET
I denne enheten dekker vi hvordan du oppretter køer og administrerer meldinger i Azure Queue Storage ved å vise kodesnutter fra et .NET-prosjekt.
Kodeeksempler er avhengige av følgende NuGet-pakker:
- Azure.Core-bibliotek for .NET: Denne pakken inneholder delte primitiver, abstraksjoner og hjelpere for moderne .NET Azure SDK-klientbiblioteker.
- Azure.Storage.Common-klientbibliotek for .NET-: Denne pakken gir infrastruktur som deles av de andre Azure Storage-klientbibliotekene.
- Azure.Storage.Queues-klientbibliotek for .NET: Denne pakken gjør det mulig å arbeide med Azure Queue Storage for lagring av meldinger som åpnes av en klient.
- System.Configuration.ConfigurationManager-bibliotek for .NET: Denne pakken gir tilgang til konfigurasjonsfiler for klientprogrammer.
Opprett køtjenesteklienten
Med klassen QueueClient kan du hente køer som er lagret i kølagring. Her er én måte å opprette tjenesteklienten på:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Opprette en kø
Dette eksemplet viser hvordan du oppretter en kø hvis den ikke allerede finnes:
// 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();
Sette inn en melding i en kø
Hvis du vil sette inn en melding i en eksisterende kø, kaller du SendMessage metoden. En melding kan være enten en streng (i UTF-8-format) eller en bytematrise. Følgende kode oppretter en kø (hvis den ikke finnes) og setter inn en melding:
// 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);
}
Kikk på neste melding
Du kan kikke på meldingene i køen uten å fjerne dem fra køen ved å ringe PeekMessages metoden. Hvis du ikke sender en verdi for maxMessages-parameteren, er standard å kikke på én melding.
// 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();
}
Endre innholdet i en melding i kø
Du kan endre innholdet i en melding på stedet i køen. Hvis meldingen representerer en arbeidsoppgave, kan du bruke denne funksjonen til å oppdatere statusen for arbeidsoppgaven. Følgende kode oppdaterer kømeldingen med nytt innhold, og angir tidsavbruddet for synlighet til å forlenge ytterligere 60 sekunder. Dette lagrer tilstanden til arbeidet som er knyttet til meldingen, og gir klienten et minutt til for å fortsette å arbeide med meldingen.
// 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 neste melding fra køen
Fjern en melding fra en kø i to trinn. Når du ringer ReceiveMessages, får du neste melding i en kø. En melding som returneres fra ReceiveMessages blir usynlig for andre kodelesingsmeldinger fra denne køen. Som standard forblir denne meldingen usynlig i 30 sekunder. Hvis du vil fullføre fjerningen av meldingen fra køen, må du også ringe DeleteMessage. Denne totrinnsprosessen med å fjerne en melding sikrer at hvis koden ikke behandler en melding på grunn av maskinvare- eller programvarefeil, kan en annen forekomst av koden få den samme meldingen og prøve på nytt. Koden kaller DeleteMessage rett etter at meldingen er 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);
}
Få kølengden
Du kan få et estimat over antall meldinger i en kø. Metoden GetProperties returnerer køegenskaper, inkludert antall meldinger. Egenskapen ApproximateMessagesCount inneholder omtrentlig antall meldinger i køen. Dette tallet er ikke lavere enn det faktiske antallet meldinger i køen, men kan være høyere.
/// 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}");
}
Slette en kø
Hvis du vil slette en kø og alle meldingene i den, kaller du Delete-metoden 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();
}