Megosztás a következőn keresztül:


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

Azure Storage-fiók létrehozása

  1. 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.

  2. 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.

  1. Egy konzolablakban (például parancsmag, PowerShell vagy Azure CLI) a dotnet new paranccsal hozzon létre egy új, a névvel QueueAppellá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
    
  2. 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

  1. 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

  1. 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.

  2. Nyissa meg a Program.cs forrásfájlt, és adja hozzá a következő névtereket közvetlenül az using 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;
    
  3. 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.

  1. Frissítse a metódust az Main aszinkron futtatáshoz. Cserélje le void egy visszatérési async Task értékre.

    static async Task Main(string[] args)
    
  2. 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.

  1. Adja hozzá az alábbi InsertMessageAsync metódust az Program 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ással SendMessageAsynchozzáadja az newMessage üzenetsorhoz.

    static async Task InsertMessageAsync(QueueClient theQueue, string newMessage)
    {
        if (null != await theQueue.CreateIfNotExistsAsync())
        {
            Console.WriteLine("The queue was created.");
        }
    
        await theQueue.SendMessageAsync(newMessage);
    }
    
  2. 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ásban SendMessageAsync.

    await theQueue.SendMessageAsync(newMessage, default, TimeSpan.FromSeconds(-1), default);
    
  3. 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.

  1. Adjon hozzá egy új metódust RetrieveNextMessageAsync az Program osztályhoz.

    Ez a metódus hívással ReceiveMessagesAsyncfogad egy üzenetet az üzenetsorból, és az első paraméterben adja át 1 , 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ással DeleteMessageAsync.

    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;
    }
    
  2. 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.

  1. 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.";
        }
    }
    
  2. 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.ReadLinekilép.

  1. 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();
    }
    
  2. 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

  1. A projektkönyvtár parancssorából futtassa a következő dotnet parancsot a projekt létrehozásához.

    dotnet build
    
  2. 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..._
    
  3. 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
    
  4. 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:

  1. Üzenetsor létrehozása
  2. Üzenetek hozzáadása és eltávolítása üzenetsorból
  3. Azure Queue Storage-üzenetsor törlése

További információért tekintse meg az Azure Queue Storage rövid útmutatóit.

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.