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 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 ReceiveMessagesbelt, 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 DeleteMessageaanroepen. 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();
}