Vytváření a správa služby Azure Queue Storage a zpráv pomocí .NET

Dokončeno

V této lekci se zabýváme vytvářením front a správou zpráv ve službě Azure Queue Storage zobrazením fragmentů kódu z projektu .NET.

Příklady kódu spoléhají na následující balíčky NuGet:

Vytvoření klienta služby Queue

Třída QueueClient vám umožňuje získat fronty uložené v Queue Storage. Jedním ze způsobů, jak vytvořit klienta služby:

QueueClient queueClient = new QueueClient(connectionString, queueName);

Vytvořte frontu

Tento příklad ukazuje, jak vytvořit frontu, pokud ještě neexistuje:

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

Vložení zprávy do fronty

Pokud chcete vložit zprávu do existující fronty, zavolejte metodu SendMessage. Zpráva může být řetězec (ve formátu UTF-8) nebo bajtové pole. Následující kód vytvoří frontu (pokud neexistuje) a vloží zprávu:

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

Náhled na další zprávu

Můžete si prohlédnout zprávy ve frontě, aniž byste je odebrali z fronty voláním metody PeekMessages. Pokud nepředáte hodnotu parametru maxMessages, výchozí je nahlédnout na jednu zprávu.

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

Změňte obsah zprávy ve frontě

Obsah zprávy můžete změnit přímo ve frontě na místě. Pokud zpráva představuje pracovní úkol, můžete tuto funkci použít k aktualizaci stavu pracovního úkolu. Následující kód aktualizuje zprávu ve frontě novým obsahem a nastaví časový limit viditelnosti tak, aby byl prodloužen o dalších 60 sekund. Tím se uloží stav práce spojené se zprávou a klientovi ještě minuta umožní pokračovat v práci se zprávou.

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

Odstranit další zprávu z fronty

Vyřazení zprávy z fronty ve dvou krocích Když zavoláte ReceiveMessages, obdržíte další zprávu ve frontě. Zpráva vrácená z ReceiveMessages se stává neviditelnou pro jakýkoli jiný kód, který čte zprávy z této fronty. Ve výchozím nastavení zůstane tato zpráva neviditelná po dobu 30 sekund. Chcete-li dokončit odebrání zprávy z fronty, musíte také zavolat DeleteMessage. Tento dvoustupňový proces odebrání zprávy zaručuje, že pokud se vašemu kódu nepodaří zpracovat zprávu kvůli selhání hardwaru nebo softwaru, může jiná instance kódu získat stejnou zprávu a zkusit to znovu. Váš kód volá DeleteMessage ihned po zpracování zprávy.

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

Získej délku fronty

Můžete získat odhad počtu zpráv ve frontě. Metoda GetProperties vrátí vlastnosti fronty, včetně počtu zpráv. Vlastnost ApproximateMessagesCount obsahuje přibližný počet zpráv ve frontě. Toto číslo není nižší než skutečný počet zpráv ve frontě, ale může být vyšší.

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

Smazat frontu

Pokud chcete odstranit frontu a všechny zprávy obsažené v ní, zavolejte metodu Delete objektu fronty.

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