Azure Queue Storage-kódminták .NET 11.x-es ügyfélkódtárak használatával
Ez a cikk olyan kódmintákat mutat be, amelyek az Azure Queue Storage .NET-hez készült ügyfélkódtárának 11.x-es verzióját használják.
2023. március 31-én megszüntettük az Azure SDK-kódtárak támogatását, amelyek nem felelnek meg az Azure SDK jelenlegi irányelveinek. Az új Azure SDK-kódtárak rendszeresen frissülnek, hogy egységes élményeket és a biztonsági állapotot erősítsék. Javasoljuk, hogy térjen át az új Azure SDK-kódtárakra, hogy kihasználhassa az új képességeket és a kritikus biztonsági frissítéseket.
Bár a régebbi kódtárak 2023. március 31-e után is használhatók, a Microsofttól már nem kapnak hivatalos támogatást és frissítéseket. További információkért lásd a támogatás kivonásáról szóló közleményt.
A legújabb 12.x-es ügyfélkódtár-verziót használó kódmintákért lásd : Rövid útmutató: Azure Queue Storage ügyfélkódtár a .NET-hez.
Queue Storage-ügyfél létrehozása
Az CloudQueueClient
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:
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
Üzenetsor létrehozása
Ez a példa bemutatja, hogyan hozhat létre üzenetsort:
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Create the queue if it doesn't already exist
queue.CreateIfNotExists();
Üzenet beszúrása egy üzenetsorba
Ha egy üzenetet egy meglévő üzenetsorba szeretne beszúrni, először hozzon létre egy újat CloudQueueMessage
. Ezután hívja meg a metódust AddMessage
. A CloudQueueMessage
sztringből (UTF-8 formátumban) vagy bájttömbből hozható létre. Az alábbi példakód létrehoz egy üzenetsort (ha még nem létezik), és beszúrja az üzenetet Hello, World
:
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Create the queue if it doesn't already exist
queue.CreateIfNotExists();
// Create a message and add it to the queue
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.AddMessage(message);
Betekintés a következő üzenetbe
Az üzenetsor elején lévő üzenetre anélkül is betekinthet, hogy eltávolítaná azt az üzenetsorból a PeekMessage
metódus meghívásával.
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Peek at the next message
CloudQueueMessage peekedMessage = queue.PeekMessage();
// Display message.
Console.WriteLine(peekedMessage.AsString);
Üzenetsorban található üzenet tartalmának módosítása
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Get the message from the queue and update the message contents.
CloudQueueMessage message = queue.GetMessage();
message.SetMessageContent2("Updated contents.", false);
queue.UpdateMessage(message,
TimeSpan.FromSeconds(60.0), // Make it invisible for another 60 seconds.
MessageUpdateFields.Content | MessageUpdateFields.Visibility);
A következő üzenet törlése
A kód két lépésben leküld egy üzenetet egy üzenetsorból. GetMessage
Híváskor a következő üzenet megjelenik egy üzenetsorban. A visszaadott GetMessage
üzenetek láthatatlanná válnak 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 a hívást is meg kell hívnia DeleteMessage
. 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ív DeleteMessage
.
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Get the next message
CloudQueueMessage retrievedMessage = queue.GetMessage();
//Process the message in less than 30 seconds, and then delete the message
queue.DeleteMessage(retrievedMessage);
Az async-await minta használata a Queue Storage gyakori API-ival
// Create the queue if it doesn't already exist
if(await queue.CreateIfNotExistsAsync())
{
Console.WriteLine("Queue '{0}' Created", queue.Name);
}
else
{
Console.WriteLine("Queue '{0}' Exists", queue.Name);
}
// Create a message to put in the queue
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");
// Async enqueue the message
await queue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");
// Async dequeue the message
CloudQueueMessage retrievedMessage = await queue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);
// Async delete the message
await queue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");
További lehetőségek használata az üzenetek törléséhez
Az alábbi példakód a GetMessages
metódust használja 20 üzenet lekérésére egy hívásban. Ezután az egyes üzeneteket egy foreach
hurok használatával dolgozza fel. Mindemellett a láthatatlansági időkorlátot minden üzenethez öt percre állítja be. Az időtúllépés az összes üzenetnél egyszerre kezdődik, így a hívás GetMessages
óta eltelt öt perc elteltével a nem törölt üzenetek ismét láthatóvá válnak.
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
foreach (CloudQueueMessage message in queue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
// Process all messages in less than 5 minutes, deleting each message after processing.
queue.DeleteMessage(message);
}
Az üzenetsor hosszának lekérése
Megbecsülheti egy üzenetsorban található üzenetek számát. A FetchAttributes
metódus üzenetsor-attribútumokat ad vissza, beleértve az üzenetszámot is. A ApproximateMessageCount
tulajdonság a metódus által FetchAttributes
lekért utolsó értéket adja vissza a Queue Storage meghívása nélkül.
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Fetch the queue attributes.
queue.FetchAttributes();
// Retrieve the cached approximate message count.
int cachedMessageCount = queue.ApproximateMessageCount;
// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);
Ü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.
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Delete the queue.
queue.Delete();
Üzenetsorok működése
Kapcsolódó cikk: Azure Queue Storage-üzenetsorok használata a .NET-ben
A projektkönyvtárban adja hozzá a következő csomagokat a dotnet add package
paranccsal:
dotnet add package Microsoft.Azure.Storage.Common
dotnet add package Microsoft.Azure.Storage.Queue
Teljes kódminta:
using System;
using System.Threading.Tasks;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Queue;
namespace QueueApp
{
class Program
{
static async Task Main(string[] args)
{
string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("mystoragequeue");
if (args.Length > 0)
{
string value = String.Join(" ", args);
await InsertMessageAsync(queue, value);
Console.WriteLine($"Sent: {value}");
}
else
{
string value = await RetrieveNextMessageAsync(queue);
Console.WriteLine($"Received: {value}");
}
Console.Write("Press Enter...");
Console.ReadLine();
}
static async Task InsertMessageAsync(CloudQueue theQueue, string newMessage)
{
if (await theQueue.CreateIfNotExistsAsync())
{
Console.WriteLine("The queue was created.");
}
CloudQueueMessage message = new CloudQueueMessage(newMessage);
await theQueue.AddMessageAsync(message);
}
static async Task<string> RetrieveNextMessageAsync(CloudQueue theQueue)
{
bool exists = await theQueue.ExistsAsync();
if (exists)
{
CloudQueueMessage retrievedMessage = await theQueue.GetMessageAsync();
if (retrievedMessage != null)
{
string theMessage = retrievedMessage.AsString;
await theQueue.DeleteMessageAsync(retrievedMessage);
return theMessage;
}
else
{
Console.Write("The queue is empty. Attempt to delete it? (Y/N) ");
string response = Console.ReadLine();
if (response.ToUpper() == "Y")
{
await theQueue.DeleteIfExistsAsync();
return "The queue was deleted.";
}
else
{
return "The queue was not deleted.";
}
}
}
else
{
return "The queue does not exist. Add a message to the command line to create the queue and store the message.";
}
}
}
}