Azure Queue Storage en berichten maken en beheren met behulp van .NET
In deze les wordt beschreven hoe u wachtrijen maakt en berichten beheert in Azure Queue Storage door codefragmenten uit een .NET-project weer te geven.
De codevoorbeelden zijn afhankelijk van de volgende NuGet-pakketten:
- Azure.Core-bibliotheek voor .NET: dit pakket biedt gedeelde primitieven, abstracties en helpers voor moderne .NET Azure SDK-clientbibliotheken.
- Azure.Storage.Common-clientbibliotheek voor .NET: dit pakket biedt infrastructuur die wordt gedeeld door de andere Azure Storage-clientbibliotheken.
- Azure.Storage.Queues-clientbibliotheek voor .NET-: met dit pakket kunt u met Azure Queue Storage werken voor het opslaan van berichten die worden geopend door een client.
- System.Configuration.ConfigurationManager-bibliotheek voor .NET-: dit pakket biedt toegang tot configuratiebestanden voor clienttoepassingen.
De Queue Service-client maken
Met de QueueClient
-klasse kunt u wachtrijen ophalen die zijn opgeslagen in Queue Storage. Hier volgt een manier om de serviceclient te maken:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Een wachtrij maken
In dit voorbeeld ziet u hoe u een wachtrij maakt als deze nog niet bestaat:
// 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();
Een bericht invoegen in een wachtrij
Als u een bericht in een bestaande wachtrij wilt invoegen, roept u de methode SendMessage
aan. Een bericht kan een tekenreeks (in UTF-8-indeling) of een bytematrix zijn. Met de volgende code wordt een wachtrij gemaakt (als deze niet bestaat) en wordt een bericht ingevoegd:
// 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);
}
Bekijk het volgende bericht
U kunt de berichten in de wachtrij bekijken zonder ze uit de wachtrij te verwijderen door de methode PeekMessages
aan te roepen. Als u geen waarde doorgeeft voor de parameter maxMessages
, is het standaardinstelling om één bericht te bekijken.
// 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();
}
De inhoud van een bericht in de wachtrij wijzigen
U kunt de inhoud van een bericht ter plaatse in de wachtrij wijzigen. Als het bericht een werktaak vertegenwoordigt, kunt u deze functie gebruiken om de status van de werktaak bij te werken. Met de volgende code wordt het wachtrijbericht bijgewerkt met nieuwe inhoud en wordt de time-out voor zichtbaarheid ingesteld om nog eens 60 seconden uit te breiden. Hiermee wordt de werkstatus opgeslagen die aan het bericht is gekoppeld en geeft de client nog een minuut om door te gaan met het werken aan het bericht.
// 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
);
}
Het volgende bericht uit de wachtrij verwijderen
Een bericht uit een wachtrij in twee stappen verwijderen. Wanneer u ReceiveMessages
belt, krijgt u het volgende bericht in een wachtrij. Een bericht dat wordt geretourneerd vanuit ReceiveMessages
wordt onzichtbaar voor andere code die berichten uit deze wachtrij leest. Dit bericht blijft standaard 30 seconden onzichtbaar. Als u het bericht uit de wachtrij wilt verwijderen, moet u ook DeleteMessage
aanroepen. Dit proces van twee stappen voor het verwijderen van een bericht zorgt ervoor dat als uw code een bericht niet kan verwerken vanwege hardware- of softwarefouten, een ander exemplaar van uw code hetzelfde bericht kan krijgen en het opnieuw kan proberen. Uw code roept DeleteMessage
direct nadat het bericht is verwerkt.
// 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);
}
De lengte van de wachtrij ophalen
U kunt een schatting krijgen van het aantal berichten in een wachtrij. De methode GetProperties
retourneert wachtrijeigenschappen, inclusief het aantal berichten. De eigenschap ApproximateMessagesCount
bevat het geschatte aantal berichten in de wachtrij. Dit aantal is niet lager dan het werkelijke aantal berichten in de wachtrij, maar kan hoger zijn.
/// 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}");
}
Een wachtrij verwijderen
Als u een wachtrij en alle berichten in de wachtrij wilt verwijderen, roept u de Delete
methode aan voor het wachtrijobject.
/// 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();
}