Oktatóanyag: Azure Queue Storage-üzenetsorok használata a .NET-ben
Az Azure Queue Storage felhőalapú üzenetsorokat implementál egy elosztott alkalmazás összetevői közötti kommunikáció engedélyezéséhez. Az egyes üzenetsorok a küldő összetevő által hozzáadható és a fogadó összetevő által feldolgozott üzenetek listáját őrzik meg. Egy üzenetsor esetén az alkalmazás azonnal skálázható az igényeknek megfelelően. Ez a cikk az Azure Queue Storage-üzenetsorok használatának alapvető lépéseit mutatja be.
Eben 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 példányá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.
Az alkalmazás létrehozása
Hozzon létre egy nevű .NET Core-alkalmazást QueueApp
. Az egyszerűség kedvéért ez az alkalmazás üzeneteket küld és fogad az üzenetsoron keresztül.
Egy konzolablakban (például cmd, PowerShell vagy Azure CLI) az
dotnet new
paranccsal hozzon létre egy új konzolalkalmazást a következő névenQueueApp
: . Ez a parancs létrehoz egy egyszerű "hello world" C#-projektet egyetlen nevű forrásfájllalProgram.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ényeknek kell megjelennie:
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 az
dotnet add package
paranccsal.Futtassa a következő parancsot a konzolablak projektmappájából.
dotnet add package Azure.Storage.Queues
Add using statements
A projektkönyvtár parancssorából írja be a parancsot
code .
a Visual Studio Code megnyitásához az aktuális könyvtárban. Hagyja nyitva a parancssori ablakot. Később további parancsok is futtathatók lesznek. Ha a rendszer a létrehozáshoz és a hibakereséshez szükséges C#-eszközök hozzáadását kéri, 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 le a értéketvoid
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 hívásokat kezdeményezne az Azure API-kba, le kell szereznie a hitelesítő adatait a Azure Portal.
A hitelesítési adatok másolása az Azure Portalról
Amikor a mintaalkalmazás kérést küld az Azure Storage-nak, azt engedélyezni kell. A kérések engedélyezéséhez adja hozzá a tárfiók hitelesítő adatait az alkalmazáshoz kapcsolati sztring. A tárfiók hitelesítő adatainak megtekintéséhez kövesse az alábbi lépéseket:
Jelentkezzen be az Azure Portalra.
Keresse meg a Storage-fiókját.
A Tárfiók menüpanel Biztonság + hálózatkezelés területén válassza a Hozzáférési kulcsok lehetőséget. Itt megtekintheti a fiók hozzáférési kulcsait és az egyes kulcsok teljes kapcsolati sztring.
A Hozzáférési kulcsok panelen válassza a Kulcsok megjelenítése lehetőséget.
A key1 szakaszban keresse meg a Kapcsolati sztring értékét. Válassza a Másolás vágólapra ikont a kapcsolati sztring másolásához. A kapcsolati sztring értéket a következő szakaszban fogja hozzáadni egy környezeti változóhoz.
A tárolási kapcsolati sztring konfigurálása
A kapcsolati sztring másolása után írja be egy új környezeti változóba az alkalmazást futtató helyi gépen. A környezeti változó megadásához nyisson meg egy konzolablakot, és kövesse az operációs rendszerének megfelelő utasításokat. Cserélje le a elemet <yourconnectionstring>
a tényleges kapcsolati sztring.
setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"
Miután hozzáadta a környezeti változót a Windowsban, el kell indítania a parancsablak új példányát.
Programok újraindítása
A környezeti változó hozzáadása után indítsa újra azokat a futó programokat, amelyeknek be kell olvasniuk a környezeti változót. A folytatás előtt például indítsa újra a fejlesztési környezetet vagy a szerkesztőt.
A kapcsolati sztring hozzáadása az alkalmazáshoz
Adja hozzá a kapcsolati sztring az alkalmazáshoz, hogy hozzáférhessen a tárfiókhoz.
Váltson vissza a Visual Studio Code-ra.
A metódusban
Main
cserélje le aConsole.WriteLine("Hello, World");
kódot a következő sorra, amely lekéri az kapcsolati sztring a környezeti változóból.string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
Adja hozzá a következő kódot
Main
egy üzenetsor-objektum létrehozásához, amelyet a rendszer később továbbít a küldési és fogadási metódusokba.QueueClient queue = new QueueClient(connectionString, "mystoragequeue");
Mentse a fájlt.
Üzenetek beszúrása az üzenetsorba
Hozzon létre egy új metódust, amellyel üzenetet küldhet az üzenetsorba.
Adja hozzá a következő
InsertMessageAsync
metódust azProgram
osztályhoz.Ez a metódus egy üzenetsor-referenciát ad át. Ha még nem létezik, új üzenetsor jön létre a meghívásával
CreateIfNotExistsAsync
. Ezután a meghívásávalSendMessageAsync
hozzáadja anewMessage
elemet az üzenetsorhoz.static async Task InsertMessageAsync(QueueClient theQueue, string newMessage) { if (null != await theQueue.CreateIfNotExistsAsync()) { Console.WriteLine("The queue was created."); } await theQueue.SendMessageAsync(newMessage); }
Választható: Alapértelmezés szerint egy üzenet élettartamának maximális időtartama hét napra van állítva. Bármilyen pozitív számot megadhat az üzenet élettartamához. 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 következő hívásátSendMessageAsync
: .await theQueue.SendMessageAsync(newMessage, default, TimeSpan.FromSeconds(-1), default);
Mentse a fájlt.
Az üzenetsor-üzeneteknek UTF-8 kódolást használó XML-kéréssel kompatibilis formátumban kell lenniük. Az üzenetek 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, amellyel lekérhet egy üzenetet az üzenetsorból. Az üzenet sikeres fogadása után fontos törölni az üzenetsorból, hogy ne dolgozza fel többször.
Adjon hozzá egy nevű
RetrieveNextMessageAsync
új metódust azProgram
osztályhoz.Ez a metódus egy üzenetet fogad az üzenetsorból a meghívásával
ReceiveMessagesAsync
, és1
átadja az első paramétert, hogy csak a következő üzenetet kérje le az üzenetsorban. Az üzenet fogadása után törölje azt az üzenetsorból a meghívásávalDeleteMessageAsync
.Ha a v12 előtti SDK-verzióval küld üzenetet az üzenetsorba, az automatikusan Base64-kódolású lesz. A 12-től kezdődően 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 explicit módon Base64-decode-nak kell lennie.
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
A projekt végén ajánlott megállapítani, 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 szeretné-e törölni.
Bontsa ki a
RetrieveNextMessageAsync
metódust az üres üzenetsor törlésére vonatkozó kérdés belefoglalásához.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 az alkalmazásnak vannak parancssori argumentumai, feltételezzük, 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
az üzenetsor következő üzenetének lekéréséhez.
Végül várja meg a felhasználói bevitelt, mielőtt a meghívásával Console.ReadLine
kilép.
Bontsa ki a metódust
Main
a parancssori argumentumok kereséséhez, és várja meg a felhasználói bevitelt.static async Task Main(string[] args) { string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING"); QueueClient queue = new QueueClient(connectionString, "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(); }
Mentse a fájlt.
Teljes kód
Itt látható a projekt teljes kódlistázása.
using System;
using System.Threading.Tasks;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
namespace QueueApp
{
class Program
{
static async Task Main(string[] args)
{
string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
QueueClient queue = new QueueClient(connectionString, "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(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 projekt létrehozásához futtassa a következő dotnet parancsot a projekt könyvtárának parancssorából.
dotnet build
A projekt sikeres buildelése után futtassa a következő 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
Folytassa az alkalmazás futtatását, amíg el nem távolítja az összes üzenetet. Ha még egyszer futtatja, megjelenik egy üzenet, amely szerint 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>_
További 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ója a .NET-hez
- Gyorsútmutató a Java üzenetsoraihoz
- Rövid útmutató a Python üzenetsoraihoz
- A JavaScript üzenetsorainak rövid útmutatója
Az elavult .NET-verziójú 11.x SDK-kkal kapcsolatos kódmintákért lásd: Kódminták a .NET 11.x verziójával.