Az Azure Queue Storage és az üzenetek létrehozása és kezelése a .NET használatával
Ebben a leckében azt mutatjuk be, hogyan hozhat létre üzenetsorokat, és hogyan kezelheti az üzeneteket az Azure Queue Storage-ban egy .NET-projekt kódrészleteinek megjelenítésével.
A példakódok a következő NuGet-csomagokra támaszkodnak:
- Azure.Core-kódtár a .NET-hez: Ez a csomag megosztott primitíveket, absztrakciókat és segítőket biztosít a modern .NET Azure SDK-ügyfélkódtárakhoz.
- Azure.Storage.Common ügyfélkódtár a .NET-hez: Ez a csomag a többi Azure Storage-ügyfélkódtár által megosztott infrastruktúrát biztosít.
- Azure.Storage.Queues ügyfélkódtár a .NET-hez: Ez a csomag lehetővé teszi az Azure Queue Storage használatát az ügyfél által elért üzenetek tárolásához.
- System.Configuration.ConfigurationManager könyvtár a .NET-hez: Ez a csomag hozzáférést biztosít az ügyfélalkalmazások konfigurációs fájljaihoz.
A Queue szolgáltatásügyfél létrehozása
Az QueueClient
osztály lehetővé teszi a Queue Storage-ban tárolt üzenetsorok lekérését. A szolgáltatásügyfél létrehozásának egyik módja:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Üzenetsor létrehozása
Ez a példa bemutatja, hogyan hozhat létre üzenetsort, ha még nem létezik:
// 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();
Üzenet beszúrása egy üzenetsorba
Ha egy üzenetet be szeretne szúrni egy meglévő üzenetsorba, hívja meg a metódust SendMessage
. Az üzenetek lehetnek sztringek (UTF-8 formátumban) vagy bájttömbök. A következő kód létrehoz egy üzenetsort (ha nem létezik), és beszúr egy üzenetet:
// 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);
}
Betekintés a következő üzenetbe
A metódus meghívásával anélkül is betekinthet az üzenetsor üzenetsorába, hogy eltávolítaná őket az PeekMessages
üzenetsorból. Ha nem ad át értéket a maxMessages
paraméternek, az alapértelmezett érték az, ha egy üzenetre néz.
// 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();
}
Üzenetsorban található üzenet tartalmának módosítása
Egy üzenetet tartalmát helyben, az üzenetsorban módosíthatja. Ha az üzenet munkafeladatot jelöl, ezzel a funkcióval frissítheti a munkafeladat állapotát. Az alábbi kód frissíti az üzenetsorban található üzenetet az új tartalommal, és a láthatósági időkorlátot további 60 másodperccel bővíti. Elmenti az üzenethez társított feladat állapotát, és az ügyfél számára további egy percet biztosít az üzenet használatának folytatására.
// 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
);
}
A következő üzenet leküldése
Üzenet leküldése egy üzenetsorból két lépésben. Híváskor ReceiveMessages
a következő üzenet megjelenik egy üzenetsorban. A visszaadott ReceiveMessages
üzenet láthatatlanná válik az üzenetsorból érkező üzeneteket olvasó többi kód számára. Alapértelmezés szerint az üzenet 30 másodpercig marad láthatatlan. Az üzenet üzenetsorból való eltávolításának befejezéséhez meg kell hívnia DeleteMessage
is. Az üzenetek kétlépéses eltávolítása lehetővé teszi, hogy ha a kód hardver- vagy szoftverhiba miatt nem tud feldolgozni egy üzenetet, a kód egy másik példánya megkaphassa ugyanazt az üzenetet, és újra megpróbálkozhasson a feldolgozásával. A kód közvetlenül az üzenet feldolgozása után hívható DeleteMessage
meg.
// 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);
}
Az üzenetsor hosszának lekérése
Megbecsülheti egy üzenetsorban található üzenetek számát. A GetProperties
metódus az üzenetsor tulajdonságait adja vissza, beleértve az üzenetszámot is. A ApproximateMessagesCount
tulajdonság az üzenetsorban lévő üzenetek hozzávetőleges számát tartalmazza. Ez a szám nem alacsonyabb, mint az üzenetsorban lévő üzenetek tényleges száma, de magasabb is lehet.
/// 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}");
}
Üzenetsor törlése
Ha törölni szeretne egy üzenetsort és az abban található összes üzenetet, hívja meg a metódust Delete
az üzenetsor-objektumon.
/// 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();
}