Azure Queue Storage en berichten maken en beheren met behulp van .NET

Voltooid

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:

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();
}