Crearea și gestionarea Azure Queue Storage și a mesajelor utilizând .NET
Î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:
- Biblioteca Azure.Core pentru .NET: Acest pachet oferă primitive, abstracții și ajutoare partajate pentru bibliotecile client .NET Azure SDK moderne.
- Biblioteca client Azure.Storage.Common pentru .NET: Acest pachet furnizează infrastructura partajată de celelalte biblioteci client Stocare Azure.
- Biblioteca client Azure.Storage.Queues pentru .NET: Acest pachet permite lucrul cu Azure Queue Storage pentru stocarea mesajelor accesate de un client.
- System.Configuration.ConfigurationManager bibliotecă pentru .NET: Acest pachet oferă acces la fișierele de configurare pentru aplicațiile client.
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();
}