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é rutiny pro moderní klientské knihovny .NET Azure SDK.
- Klientská knihovna Azure.Storage.Common pro .NET: Tento balíček poskytuje infrastrukturu sdílenou ostatními klientskými knihovnami azure Storage.
- Klientská knihovna Azure.Storage.Queues pro .NET: Tento balíček umožňuje pracovat se službou Azure Queue Storage pro ukládání zpráv, ke kterým přistupuje klient.
- Knihovna 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 front
Třída QueueClient
umožňuje načíst fronty uložené ve službě Queue Storage. Tady je jeden ze způsobů, jak vytvořit klienta služby:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Vytvořit 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
Chcete-li 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);
}
Zobrazení náhledu další zprávy
Můžete si prohlédnout zprávy ve frontě, aniž byste je z fronty odebrali voláním PeekMessages
metody. Pokud parametr nepředáte hodnotu maxMessages
, výchozí hodnota se zobrazí v jedné zprávě.
// 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ěna obsahu zpráv zařazených ve frontě
Podle potřeby můžete změnit obsah zprávy přímo ve frontě. Pokud zpráva představuje pracovní úlohu, mohli byste tuto funkci použít k aktualizaci stavu pracovních úloh. Následující kód aktualizuje zprávy ve frontě o nový obsah a prodlouží časový limit viditelnosti na 60 sekund. Uloží se tím stav práce spojený se zprávou a klient získá další minutu, aby mohl pokračovat ve 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 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
);
}
Vyřazení další zprávy z fronty
Vyřazení zprávy z fronty ve dvou krocích Když zavoláte ReceiveMessages
, zobrazí se další zpráva ve frontě. Zpráva vrácená z ReceiveMessages
této fronty se stane neviditelnou pro jakýkoli jiný kód, který čte zprávy z této fronty. Ve výchozím nastavení tato zpráva zůstává neviditelná po dobu 30 sekund. Chcete-li dokončit odebrání zprávy z fronty, musíte také volat DeleteMessage
. Tento dvoukrokový proces odebrání zprávy zaručuje, aby v případě, že se vašemu kódu nepodaří zprávu zpracovat z důvodu selhání hardwaru nebo softwaru, mohla stejnou zprávu získat jiná instance vašeho kódu a bylo možné to zkusit znovu. Volání kódu DeleteMessage
hned 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ískání délky fronty
Podle potřeby můžete získat odhadovaný počet 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}");
}
Odstranění fronty
Chcete-li odstranit frontu a všechny zprávy obsažené v ní, zavolejte Delete
metodu 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();
}