Crearea și gestionarea Azure Queue Storage și a mesajelor utilizând .NET

Finalizat

În această unitate, acoperim modul de creare a cozilor și de gestionare a mesajelor în Azure Queue Storage, afișând fragmente de cod dintr-un proiect .NET.

Exemplele de cod se bazează pe următoarele pachete NuGet:

Crearea clientului serviciu coadă

Clasa QueueClient vă permite să recuperați cozile stocate în spațiul de stocare din coadă. Iată o modalitate de a crea clientul de servicii:

QueueClient queueClient = new QueueClient(connectionString, queueName);

Crearea unei cozi

Acest exemplu vă arată cum să creați o coadă dacă nu există deja:

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

Inserarea unui mesaj într-o coadă

Pentru a insera un mesaj într-o coadă existentă, apelați SendMessage metoda. Un mesaj poate fi un șir (în format UTF-8) sau o matrice de octeți. Următorul cod creează o coadă (dacă nu există) și inserează un mesaj:

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

Uită-te la următorul mesaj

Puteți arunca o privire la mesajele din coadă fără a le elimina din coadă apelând metoda PeekMessages . Dacă nu transmiteți o valoare pentru maxMessages parametru, valoarea implicită este să aruncați o privire la un mesaj.

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

Modificarea conținutului unui mesaj din coadă

Puteți modifica conținutul unui mesaj pe loc în coadă. Dacă mesajul reprezintă o activitate de lucru, puteți utiliza această caracteristică pentru a actualiza starea activității de lucru. Următorul cod actualizează mesajul coadă cu conținut nou și setează timpul de expirare a vizibilității pentru a prelungi încă 60 de secunde. Acest lucru salvează starea de lucru asociată mesajului și oferă clientului încă un minut pentru a continua să lucreze la mesaj.

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

Depuneți în coadă următorul mesaj

Depuneți un mesaj dintr-o coadă în doi pași. Când apelați ReceiveMessages, primiți următorul mesaj într-o coadă. Un mesaj returnat de la ReceiveMessages devine invizibil pentru orice alt cod care citește mesajele din această coadă. În mod implicit, acest mesaj rămâne invizibil timp de 30 de secunde. Pentru a termina eliminarea mesajului din coadă, trebuie să apelați DeleteMessageși . Acest proces în doi pași de eliminare a unui mesaj vă asigură că, în cazul în care codul nu reușește să proceseze un mesaj din cauza unei defecțiuni hardware sau software, o altă instanță a codului dvs. poate primi același mesaj și poate încerca din nou. Codul dvs. apelează DeleteMessage imediat după procesarea mesajului.

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

Obțineți lungimea cozii

Puteți obține o estimare a numărului de mesaje dintr-o coadă. Metoda GetProperties returnează proprietățile cozii, inclusiv numărul de mesaje. Proprietatea ApproximateMessagesCount conține numărul aproximativ de mesaje din coadă. Acest număr nu este mai mic decât numărul real de mesaje din coadă, dar poate fi mai mare.

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

Ștergerea unei cozi

Pentru a șterge o coadă și toate mesajele conținute în ea, apelați metoda de Delete pe obiectul coadă.

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