Vytváření a správa služby Azure Queue Storage a zpráv pomocí .NET
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:
- Knihovna Azure.Core pro .NET: Tento balíček poskytuje sdílené primitivy, abstrakce a pomocné funkce pro moderní klientské knihovny Azure SDK pro .NET.
- klientskou knihovnu Azure.Storage.Common pro .NET: Tento balíček poskytuje infrastrukturu sdílenou ostatními klientskými knihovnami Azure Storage.
- klientskou knihovnu Azure.Storage.Queues pro .NET: Tento balíček umožňuje práci se službou Azure Queue Storage pro ukládání zpráv, ke kterým přistupuje klient.
- knihovny System.Configuration.ConfigurationManager pro .NET: Tento balíček poskytuje přístup ke konfiguračním souborům pro klientské aplikace.
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();
}