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-serviceclient maken
Met de QueueClient
klasse kunt u wachtrijen ophalen die zijn opgeslagen in Queue Storage. Hier volgt één 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 in een wachtrij invoegen
Als u een bericht wilt invoegen in een bestaande wachtrij, roept u de SendMessage
methode 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);
}
Bekijken van het volgende bericht
U kunt de berichten in de wachtrij bekijken zonder ze uit de wachtrij te verwijderen door de methode aan te PeekMessages
roepen. Als u geen waarde voor de maxMessages
parameter doorgeeft, 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 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 bericht in de wachtrij bijgewerkt met nieuwe inhoud en wordt de time-out voor de zichtbaarheid met 60 seconden verlengd. Hiermee wordt de status van de werkitems die aan het bericht zijn gekoppeld, opgeslagen en krijgt de client een extra minuut om aan het bericht te blijven werken.
// 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 belt ReceiveMessages
, krijgt u het volgende bericht in een wachtrij. Een bericht dat wordt geretourneerd, ReceiveMessages
wordt onzichtbaar voor alle andere code die berichten uit deze wachtrij leest. Standaard blijft het bericht onzichtbaar gedurende 30 seconden. Als u het bericht uit de wachtrij wilt verwijderen, moet u ook aanroepen DeleteMessage
. Dit proces in twee stappen voor het verwijderen van een bericht zorgt ervoor dat als de code er niet in slaagt een bericht te verwerken vanwege hardware- of softwareproblemen, een ander exemplaar van uw code hetzelfde bericht kan ophalen en het opnieuw kan proberen. Uw code roept DeleteMessage
direct na het verwerken van het bericht aan.
// 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);
}
Lengte van de wachtrij ophalen
U kunt een schatting ophalen van het aantal berichten in de wachtrij. De GetProperties
methode retourneert wachtrijeigenschappen, inclusief het aantal berichten. De ApproximateMessagesCount
eigenschap 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 op het wachtrijobject aan.
/// 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();
}