Az Azure Queue Storage és az üzenetek létrehozása és kezelése a .NET használatával

Befejeződött

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:

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 ReceiveMessagesa 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 DeleteMessageis. 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();
}