Opret og administrer Azure Queue Storage og meddelelser ved hjælp af .NET

Fuldført

I dette undermodul dækker vi, hvordan du opretter køer og administrerer meddelelser i Azure Queue Storage ved at vise kodestykker fra et .NET-projekt.

Kodeeksemplerne er afhængige af følgende NuGet-pakker:

Opret køtjenesteklienten

Klassen QueueClient giver dig mulighed for at hente køer, der er gemt i Kølager. Her er en måde at oprette tjenesteklienten på:

QueueClient queueClient = new QueueClient(connectionString, queueName);

Opret en kø

I dette eksempel kan du se, hvordan du opretter en kø, hvis den ikke allerede findes:

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

Indsæt en meddelelse i en kø

Hvis du vil indsætte en meddelelse i en eksisterende kø, skal du kalde metoden SendMessage. En meddelelse kan enten være en streng (i UTF-8-format) eller en bytematrix. Følgende kode opretter en kø (hvis den ikke findes) og indsætter en meddelelse:

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

Smugkig på den næste meddelelse

Du kan smugkig på meddelelserne i køen uden at fjerne dem fra køen ved at kalde metoden PeekMessages. Hvis du ikke sender en værdi for parameteren maxMessages, er standarden at kigge på én meddelelse.

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

Rediger indholdet af en meddelelse i kø

Du kan ændre indholdet af en meddelelse på stedet i køen. Hvis meddelelsen repræsenterer en arbejdsopgave, kan du bruge denne funktion til at opdatere status for arbejdsopgaven. Følgende kode opdaterer kømeddelelsen med nyt indhold og indstiller synlighedstimeoutet til at forlænge yderligere 60 sekunder. Dette gemmer den arbejdstilstand, der er knyttet til meddelelsen, og giver klienten endnu et minut til at fortsætte med at arbejde på meddelelsen.

// 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 den næste meddelelse

Dequeue en meddelelse fra en kø i to trin. Når du kalder ReceiveMessages, får du den næste meddelelse i en kø. En meddelelse, der returneres fra ReceiveMessages bliver usynlig for alle andre kodelæsningsmeddelelser fra denne kø. Denne meddelelse forbliver som standard usynlig i 30 sekunder. Hvis du vil fjerne meddelelsen fra køen, skal du også kalde DeleteMessage. Denne proces med to trin til fjernelse af en meddelelse sikrer, at hvis din kode ikke kan behandle en meddelelse på grund af hardware- eller softwarefejl, kan en anden forekomst af din kode få den samme meddelelse og prøve igen. Dine kodekald DeleteMessage lige efter, at meddelelsen er blevet 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);
}

Hent kølængden

Du kan få et estimat af antallet af meddelelser i en kø. Metoden GetProperties returnerer køegenskaber, herunder antallet af meddelelser. Egenskaben ApproximateMessagesCount indeholder det omtrentlige antal meddelelser i køen. Dette tal er ikke lavere end det faktiske antal meddelelser i køen, men kan være højere.

/// 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}");
}

Slet en kø

Hvis du vil slette en kø og alle meddelelserne i den, skal du kalde metoden Delete 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();
}