Oktatóanyag: Azure Queue Storage-üzenetsorok használata a .NET-ben
Az Azure Queue Storage felhőalapú üzenetsorokat implementál az elosztott alkalmazások összetevői közötti kommunikáció engedélyezéséhez. Minden üzenetsor fenntartja a feladó összetevő által felvehető és a fogadó összetevő által feldolgozott üzenetek listáját. Egy üzenetsor esetén az alkalmazás azonnal skálázható az igények kielégítése érdekében. Ez a cikk az Azure Queue Storage-üzenetsorok használatának alapvető lépéseit mutatja be.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Azure Storage-fiók létrehozása
- Az alkalmazás létrehozása
- Az Azure-ügyfélkódtárak hozzáadása
- Aszinkron kód támogatásának hozzáadása
- Üzenetsor létrehozása
- Üzenetek beszúrása üzenetsorba
- Üzenetek törlése
- Üres üzenetsor törlése
- Parancssori argumentumok keresése
- Készítsen buildet és futtassa az alkalmazást
Előfeltételek
- Szerezze be a platformfüggetlen Visual Studio Code-szerkesztő ingyenes másolatát.
- Töltse le és telepítse a .NET Core SDK 3.1-es vagy újabb verzióját.
- Ha nem rendelkezik aktuális Azure-előfizetéssel, a kezdés előtt hozzon létre egy ingyenes fiókot .
Azure Storage-fiók létrehozása
Először hozzon létre egy Azure Storage-fiókot.
A tárfiókok létrehozásának részletes útmutatója: Tárfiók létrehozása. Ez egy külön lépés, amelyet egy ingyenes Azure-fiók létrehozása után hajt végre az előfeltételek között.
Győződjön meg arról, hogy a felhasználói fiókjához hozzárendelték a Társor adatszolgáltatói szerepkörét, amely a tárfiókra, a szülőerőforráscsoportra vagy az előfizetésre terjed ki. Lásd: Hitelesítés az Azure-ban.
Az alkalmazás létrehozása
Hozzon létre egy .NET Core-alkalmazást.QueueApp
Az egyszerűség kedvéért az alkalmazás üzeneteket küld és fogad az üzenetsoron keresztül.
Egy konzolablakban (például parancsmag, PowerShell vagy Azure CLI) a
dotnet new
paranccsal hozzon létre egy új, a névvelQueueApp
ellátott konzolalkalmazást. Ez a parancs létrehoz egy egyszerű "hello world" C#-projektet egyetlen forrásfájllal.Program.cs
dotnet new console -n QueueApp
Váltson az újonnan létrehozott
QueueApp
mappára, és fordítsa le az alkalmazást, hogy ellenőrizhesse, minden rendben van-e.cd QueueApp
dotnet build
Az alábbi kimenethez hasonló eredményeket kell látnia:
C:\Tutorials>dotnet new console -n QueueApp The template "Console Application" was created successfully. Processing post-creation actions... Running 'dotnet restore' on QueueApp\QueueApp.csproj... Restore completed in 155.63 ms for C:\Tutorials\QueueApp\QueueApp.csproj. Restore succeeded. C:\Tutorials>cd QueueApp C:\Tutorials\QueueApp>dotnet build Microsoft (R) Build Engine version 16.0.450+ga8dc7f1d34 for .NET Core Copyright (C) Microsoft Corporation. All rights reserved. Restore completed in 40.87 ms for C:\Tutorials\QueueApp\QueueApp.csproj. QueueApp -> C:\Tutorials\QueueApp\bin\Debug\netcoreapp3.1\QueueApp.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.40 C:\Tutorials\QueueApp>_
Az Azure-ügyfélkódtárak hozzáadása
Adja hozzá az Azure Storage-ügyfélkódtárakat a projekthez a
dotnet add package
parancs használatával.Futtassa a következő parancsot a konzolablak projektmappájából.
dotnet add package Azure.Storage.Queues
Hozzáadás utasítások használatával
A projektkönyvtár parancssorából írja be
code .
a Visual Studio Code megnyitásához az aktuális könyvtárban. Tartsa nyitva a parancssori ablakot. Később további parancsok is futtathatók lesznek. Ha a rendszer c#-eszközök hozzáadását kéri a létrehozáshoz és a hibakereséshez, kattintson az Igen gombra.Nyissa meg a
Program.cs
forrásfájlt, és adja hozzá a következő névtereket közvetlenül azusing System;
utasítás után. Ez az alkalmazás ezekből a névterekből származó típusokat használ az Azure Storage-hoz való csatlakozáshoz és az üzenetsorok kezeléséhez.using System.Threading.Tasks; using Azure.Storage.Queues; using Azure.Storage.Queues.Models;
Mentse a
Program.cs
fájlt.
Aszinkron kód támogatásának hozzáadása
Mivel az alkalmazás felhőalapú erőforrásokat használ, a kód aszinkron módon fut.
Frissítse a metódust az
Main
aszinkron futtatáshoz. Cserélje levoid
egy visszatérésiasync Task
értékre.static async Task Main(string[] args)
Mentse a
Program.cs
fájlt.
Üzenetsor létrehozása
Mielőtt bármilyen hívást indítanának az Azure API-kba, győződjön meg arról, hogy ugyanazzal a Microsoft Entra-fiókkal van hitelesítve, amelyhez a szerepkört hozzárendelte. A hitelesítés után létrehozhat és engedélyezheti az objektumokat QueueClient
DefaultAzureCredential
a tárfiók üzenetsoradatainak eléréséhez. DefaultAzureCredential
automatikusan felderíti és használja a bejelentkezett fiókot. Ha tudni szeretné, hogyan jelentkezhet be, majd hozhat létre objektumotQueueClient
, olvassa el a Hozzáférés engedélyezése és egy ügyfélobjektum létrehozása című témakört.
Üzenetek beszúrása az üzenetsorba
Hozzon létre egy új metódust, amellyel üzenetet küldhet az üzenetsorba.
Adja hozzá az alábbi
InsertMessageAsync
metódust azProgram
osztályhoz.Ez a metódus üzenetsor-referenciát ad át. Ha még nem létezik, új üzenetsor jön létre a hívással
CreateIfNotExistsAsync
. Ezután hívássalSendMessageAsync
hozzáadja aznewMessage
üzenetsorhoz.static async Task InsertMessageAsync(QueueClient theQueue, string newMessage) { if (null != await theQueue.CreateIfNotExistsAsync()) { Console.WriteLine("The queue was created."); } await theQueue.SendMessageAsync(newMessage); }
Nem kötelező: Alapértelmezés szerint egy üzenet élettartamának maximális időtartama hét napra van állítva. Az üzenet élettartamának bármilyen pozitív számát megadhatja. Az alábbi kódrészlet olyan üzenetet ad hozzá, amely soha nem jár le.
Ha olyan üzenetet szeretne hozzáadni, amely nem jár le, használja
Timespan.FromSeconds(-1)
a hívásbanSendMessageAsync
.await theQueue.SendMessageAsync(newMessage, default, TimeSpan.FromSeconds(-1), default);
Mentse a fájlt.
Az üzenetsor-üzeneteknek UTF-8 kódolással kompatibilis formátumúnak kell lenniük. Egy üzenet mérete legfeljebb 64 KB lehet. Ha egy üzenet bináris adatokat tartalmaz, a Base64 kódolja az üzenetet.
Üzenetek törlése
Hozzon létre egy új metódust az üzenetsorból való lekéréshez. Az üzenet sikeres fogadása után fontos törölni az üzenetsorból, hogy ne dolgozza fel többször.
Adjon hozzá egy új metódust
RetrieveNextMessageAsync
azProgram
osztályhoz.Ez a metódus hívással
ReceiveMessagesAsync
fogad egy üzenetet az üzenetsorból, és az első paraméterben adja át1
, hogy csak a következő üzenet legyen lekérve az üzenetsorból. Az üzenet fogadása után törölje azt az üzenetsorból a hívássalDeleteMessageAsync
.Amikor a v12 előtti SDK egy verziójával küld üzenetet az üzenetsorba, az automatikusan Base64-kódolású lesz. A 12-től kezdve ez a funkció el lett távolítva. Ha egy üzenetet a v12 SDK használatával kér le, az nem lesz automatikusan Base64-dekódolva. A tartalmat kifejezetten a Base64-nek kell dekódolnia .
static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue) { if (await theQueue.ExistsAsync()) { QueueProperties properties = await theQueue.GetPropertiesAsync(); if (properties.ApproximateMessagesCount > 0) { QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1); string theMessage = retrievedMessage[0].Body.ToString(); await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt); return theMessage; } return null; } return null; }
Mentse a fájlt.
Üres üzenetsor törlése
Ajánlott eljárás a projekt végén annak megállapítására, hogy szüksége van-e még a létrehozott erőforrásokra. A továbbra is futó erőforrások költségekkel járhatnak. Ha az üzenetsor létezik, de üres, kérdezze meg a felhasználót, hogy törölni szeretné-e.
Bontsa ki a
RetrieveNextMessageAsync
metódust úgy, hogy az üres üzenetsor törlésére vonatkozó kérést is tartalmazzon.static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue) { if (await theQueue.ExistsAsync()) { QueueProperties properties = await theQueue.GetPropertiesAsync(); if (properties.ApproximateMessagesCount > 0) { QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1); string theMessage = retrievedMessage[0].Body.ToString(); await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt); 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."; } }
Mentse a fájlt.
Parancssori argumentumok keresése
Ha parancssori argumentumok vannak átadva az alkalmazásnak, tegyük fel, hogy az üzenetsorhoz hozzáadandó üzenet. Sztring létrehozásához kapcsolja össze az argumentumokat. Adja hozzá ezt a sztringet az üzenetsorhoz a InsertMessageAsync
korábban hozzáadott metódus meghívásával.
Ha nincsenek parancssori argumentumok, próbáljon meg lekérni egy műveletet. Hívja meg a metódust RetrieveNextMessageAsync
a következő üzenet lekéréséhez az üzenetsorban.
Végül várjon a felhasználói bemenetre, mielőtt a hívással Console.ReadLine
kilép.
Bontsa ki a metódust
Main
a parancssori argumentumok kereséséhez, és várja meg a felhasználói bemenetet. Az alábbi kódrészletben cserélje le a{storageAccountName}
helyőrzőt a tárfiók nevére.static async Task Main(string[] args) { QueueClient queue = new QueueClient( new Uri($"https://{storageAccountName}.queue.core.windows.net/mystoragequeue"), new DefaultAzureCredential()); 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(); }
Mentse a fájlt.
Teljes kód
Itt találja a projekt teljes kódlistát.
using System;
using System.Threading.Tasks;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
using Azure.Identity;
namespace QueueApp
{
class Program
{
static async Task Main(string[] args)
{
QueueClient queue = new QueueClient(
new Uri($"https://{storageAccountName}.queue.core.windows.net/mystoragequeue"),
new DefaultAzureCredential());
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(QueueClient theQueue, string newMessage)
{
if (null != await theQueue.CreateIfNotExistsAsync())
{
Console.WriteLine("The queue was created.");
}
await theQueue.SendMessageAsync(newMessage);
}
static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue)
{
if (await theQueue.ExistsAsync())
{
QueueProperties properties = await theQueue.GetPropertiesAsync();
if (properties.ApproximateMessagesCount > 0)
{
QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
string theMessage = retrievedMessage[0].Body.ToString();
await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
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.";
}
}
}
}
Készítsen buildet és futtassa az alkalmazást
A projektkönyvtár parancssorából futtassa a következő dotnet parancsot a projekt létrehozásához.
dotnet build
A projekt sikeres létrehozása után futtassa az alábbi parancsot az első üzenet üzenetsorhoz való hozzáadásához.
dotnet run First queue message
A következő kimenetnek kell megjelennie:
C:\Tutorials\QueueApp>dotnet run First queue message The queue was created. Sent: First queue message Press Enter..._
Futtassa az alkalmazást parancssori argumentumok nélkül az üzenetsor első üzenetének fogadásához és eltávolításához.
dotnet run
Futtassa az alkalmazást, amíg el nem távolítja az összes üzenetet. Ha még egyszer futtatja, egy üzenet jelenik meg arról, hogy az üzenetsor üres, és egy üzenetsor törlésére vonatkozó üzenet jelenik meg.
C:\Tutorials\QueueApp>dotnet run First queue message The queue was created. Sent: First queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Second queue message Sent: Second queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Third queue message Sent: Third queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Received: First queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Received: Second queue message Press Enter... C:\Tutorials\QueueApp>dotnet run Received: Third queue message Press Enter... C:\Tutorials\QueueApp>dotnet run The queue is empty. Attempt to delete it? (Y/N) Y Received: The queue was deleted. Press Enter... C:\Tutorials\QueueApp>_
Következő lépések
Ez az oktatóanyag bemutatta, hogyan végezheti el az alábbi műveleteket:
- Üzenetsor létrehozása
- Üzenetek hozzáadása és eltávolítása üzenetsorból
- Azure Queue Storage-üzenetsor törlése
További információért tekintse meg az Azure Queue Storage rövid útmutatóit.
- Üzenetsorok – rövid útmutató a .NET-hez
- Gyorsútmutató a Java üzenetsoraihoz
- Rövid útmutató a Python üzenetsoraihoz
- Üzenetsorok – rövid útmutató JavaScripthez
Az elavult .NET 11.x SDK-kkal kapcsolatos kódmintákért lásd a .NET 11.x verzióját használó kódmintákat.