začínáme s tématy a předplatnými Azure Service Bus (.net)

v tomto rychlém startu se dozvíte, jak odesílat zprávy do Service Busho tématu a přijímat zprávy z předplatného do tohoto tématu pomocí knihovny Azure. Messaging. ServiceBus .net.

V tomto rychlém startu provedete následující kroky:

  1. Pomocí webu Azure Portal vytvoříme obor názvů služby Service Bus.
  2. Pomocí webu Azure Portal vytvoříme téma služby Service Bus.
  3. Pomocí webu Azure Portal vytvoříme k tomuto tématu odběr služby Service Bus.
  4. Napíšeme konzolovou aplikaci .NET Core pro odeslání sady zpráv do tématu.
  5. Napíšeme konzolovou aplikaci .NET Core pro příjem těchto zpráv z odběru.

Poznámka

v tomto rychlém startu najdete podrobné pokyny pro implementaci jednoduchého scénáře odeslání dávky zpráv do Service Bus tématu a příjem těchto zpráv z předplatného tématu. další ukázky v jiných a pokročilých scénářích najdete v tématu Service Bus ukázky .net v GitHub.

Požadavky

pokud s touto službou teprve začínáte, přečtěte si téma přehled Service Bus před provedením tohoto rychlého startu.

  • Předplatné Azure. pokud chcete používat služby azure, včetně azure Service Bus, potřebujete předplatné. Pokud nemáte existující účet Azure, můžete si zaregistrovat bezplatnou zkušební verzi nebo využít výhody pro předplatitele MSDN při vytváření účtu.
  • Microsoft Visual Studio 2019. klientská knihovna Azure Service Bus využívá nové funkce, které byly představeny v C# 8,0. Knihovnu můžete dál používat s předchozími jazykovými verzemi jazyka C#, ale nová syntaxe nebude k dispozici. Chcete-li použít úplnou syntaxi, doporučujeme kompilovat s .NET Core SDK 3,0 nebo vyšší a jazykové verze nastavenou na latest . pokud používáte Visual Studio, verze před Visual Studio 2019 nejsou kompatibilní s nástroji potřebnými k sestavování projektů v jazyce C# 8,0. Visual Studio 2019, včetně bezplatné edice Community, si můžete stáhnout tady.

Vytvoření oboru názvů na webu Azure Portal

Pokud chcete začít používat entity zasílání zpráv služby Service Bus v Azure, musíte nejprve vytvořit obor názvů s jedinečným názvem v rámci Azure. Obor názvů poskytuje kontejner oboru pro adresování prostředků služby Service Bus v rámci vaší aplikace.

Vytvoření oboru názvů:

  1. Přihlaste se k portálu Azure Portal.

  2. V levém navigačním podokně portálu vyberte + vytvořit prostředek, vyberte integrace a pak vyberte Service Bus.

    obrázek znázorňující výběr vytvořit prostředek, integraci a pak Service Bus v nabídce

  3. V části základy stránky vytvořit obor názvů použijte následující postup:

    1. V části předplatné vyberte předplatné Azure, ve kterém chcete vytvořit obor názvů.

    2. V poli Skupina prostředků vyberte existující skupinu prostředků, ve které bude obor názvů živý, nebo vytvořte novou.

    3. Zadejte název oboru názvů. Systém okamžitě kontroluje, jestli je název dostupný. Seznam pravidel pro názvové obory názvů najdete v tématu Create Namespace REST API.

    4. V poli umístění vyberte oblast, ve které by měl být hostovaný obor názvů.

    5. v části cenová úroveň vyberte cenovou úroveň (Basic, Standard nebo Premium) pro obor názvů. Pro tento rychlý Start vyberte standardní.

      Pokud chcete používat témata a odběry, vyberte buď možnost standard, nebo Premium. Témata/předplatná nejsou podporovaná v cenové úrovni Basic.

      pokud jste vybrali cenovou úroveň Premium , zadejte počet jednotek zasílání zpráv. Úroveň Premium poskytuje izolaci prostředků na úrovni procesoru a paměti, aby se jednotlivé úlohy spouštěly izolovaně. Kontejner prostředků se nazývá jednotka zasílání zpráv. Obor názvů Premium má alespoň jednu jednotku zasílání zpráv. pro každý Service Bus Premium oboru názvů můžete vybrat 1, 2 nebo 4 jednotky zasílání zpráv. další informace najdete v tématu Service Bus Premium zasílání zpráv.

    6. Vyberte Zkontrolovat a vytvořit. Systém teď vytvoří obor názvů a povolí ho. Pravděpodobně budete muset několik minut počkat, než systém zřídí prostředky pro váš účet.

      Obrázek znázorňující stránku vytvořit obor názvů

    7. Na stránce Revize + vytvořit zkontrolujte nastavení a vyberte vytvořit.

  4. Na stránce nasazení vyberte Přejít na prostředek .

    Obrázek znázorňující stránku úspěšného nasazení s odkazem přejít na prostředek

  5. Zobrazí se Domovská stránka oboru názvů služby Service Bus.

    obrázek znázorňující domovskou stránku vytvořeného oboru názvů Service Bus.

Získání připojovacího řetězce

Vytvoření nového oboru názvů automaticky vygeneruje počáteční zásadu sdíleného přístupového podpisu (SAS) s primárními a sekundárními klíči a primárním a sekundárním připojovacím řetězcem, které každý z nich udělí úplnou kontrolu nad všemi aspekty tohoto oboru názvů. informace o tom, jak vytvořit pravidla s více omezenými právy pro pravidelné odesílatele a přijímače, najdete v tématu Service Bus ověřování a autorizaci .

K zkopírování primárního připojovacího řetězce pro váš obor názvů použijte následující postup:

  1. na stránce Service Bus obor názvů vyberte v levé nabídce zásady sdíleného přístupu .

  2. Na stránce zásady sdíleného přístupu vyberte RootManageSharedAccessKey.

    Snímek obrazovky s zvýrazněnou zásadou zobrazí okno zásady sdíleného přístupu.

  3. V okně Zásada: RootManageSharedAccessKey klikněte na tlačítko Kopírovat vedle položky Primární připojovací řetězec a zkopírujte si připojovací řetězec do schránky pro pozdější použití. Vložte tuto hodnotu do Poznámkového bloku nebo jiného dočasného umístění.

    Snímek obrazovky se zobrazí S názvem RootManageSharedAccessKey, který obsahuje klíče a připojovací řetězce.

    Tato stránka slouží ke zkopírování primárního klíče, sekundárního klíče a sekundárního připojovacího řetězce.

Vytvoření tématu pomocí webu Azure Portal

  1. na stránce Service Bus obor názvů vyberte v nabídce vlevo možnost témata .

  2. Na panelu nástrojů vyberte + téma .

  3. Zadejte název tématu. U ostatních možností ponechte jejich výchozí hodnoty.

  4. Vyberte Vytvořit.

    Obrázek znázorňující stránku vytvořit téma

Vytvoření odběru tématu

  1. Vyberte téma , které jste vytvořili v předchozí části.

    Obrázek znázorňující výběr tématu ze seznamu témat.

  2. na stránce Service Bus téma vyberte + předplatné na panelu nástrojů.

    Obrázek znázorňující tlačítko Přidat odběr

  3. Na stránce vytvořit odběr proveďte tyto kroky:

    1. Jako název předplatného zadejte S1 .

    2. Zadejte 3 pro maximální počet doručení.

    3. Pak vyberte vytvořit a vytvořte odběr.

      Obrázek znázorňující stránku vytvořit odběr

Důležité

Poznamenejte si připojovací řetězec k oboru názvů, názvu tématu a názvu předplatného. Později je budete používat v tomto kurzu.

Odesílání zpráv do tématu

v této části se dozvíte, jak vytvořit konzolovou aplikaci .net Core pro posílání zpráv do Service Busho tématu.

Poznámka

v tomto rychlém startu najdete podrobné pokyny pro implementaci jednoduchého scénáře odeslání dávky zpráv do Service Bus tématu a příjem těchto zpráv z předplatného tématu. další ukázky v jiných a pokročilých scénářích najdete v tématu Service Bus ukázky .net v GitHub.

Vytvoření konzolové aplikace

  1. Spusťte Visual Studio 2019.
  2. Vyberte vytvořit nový projekt.
  3. V dialogovém okně vytvořit nový projekt proveďte následující kroky: Pokud toto dialogové okno nevidíte, vyberte v nabídce soubor , vyberte možnost nový a potom vyberte možnost Project.
    1. Pro programovací jazyk vyberte C# .

    2. Jako typ aplikace vyberte Konzola .

    3. V seznamu výsledků vyberte Konzolová aplikace .

    4. Pak vyberte Další.

      Obrázek znázorňující dialogové okno vytvořit nový projekt s vybraným jazykem C# a konzolou

  4. Jako název projektu zadejte TopicSender , ServiceBusTopicQuickStart pro název řešení a pak vyberte Další.
  5. Na stránce Další informace vyberte vytvořit a vytvořte tak řešení a projekt.

Přidání balíčku Service Bus NuGet

  1. v nabídce vyberte nástroje > NuGet Správce balíčků > Správce balíčků konzole .

  2. spuštěním následujícího příkazu nainstalujte balíček Azure. Messaging. ServiceBus NuGet:

    Install-Package Azure.Messaging.ServiceBus
    

Přidání kódu pro odesílání zpráv do tématu

  1. V programu program. cs přidejte následující using příkazy v horní části definice oboru názvů před deklaraci třídy.

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    
  2. V rámci Program třídy deklarujte následující vlastnosti těsně před Main metodou. nahraďte <NAMESPACE CONNECTION STRING> připojovacím řetězcem k vašemu oboru názvů Service Bus. a nahraďte <TOPIC NAME> názvem svého Service Busho tématu.

    // connection string to your Service Bus namespace
    static string connectionString = "<NAMESPACE CONNECTION STRING>";
    
    // name of your Service Bus topic
    static string topicName = "<TOPIC NAME>";
    
    // the client that owns the connection and can be used to create senders and receivers
    static ServiceBusClient client;
    
    // the sender used to publish messages to the topic
    static ServiceBusSender sender;
    
    // number of messages to be sent to the topic
    private const int numOfMessages = 3;
    
  3. V programu program. cs nahraďte kód následujícím kódem. Tady jsou důležité kroky z kódu.

    1. Vytvoří objekt ServiceBusClient pomocí připojovacího řetězce k oboru názvů.
    2. vyvolá metodu CreateSender ServiceBusClient objektu pro vytvoření objektu ServiceBusSender pro konkrétní téma Service Bus.
    3. Vytvoří objekt ServiceBusMessageBatch pomocí ServiceBusSender. CreateMessageBatchAsync.
    4. Přidejte zprávy do dávky pomocí ServiceBusMessageBatch. TryAddMessage.
    5. pošle dávku zpráv do tématu Service Bus pomocí metody ServiceBusSender. SendMessagesAsync .
    static async Task Main()
    {
        // The Service Bus client types are safe to cache and use as a singleton for the lifetime
        // of the application, which is best practice when messages are being published or read
        // regularly.
        //
        // Create the clients that we'll use for sending and processing messages.
        client = new ServiceBusClient(connectionString);
        sender = client.CreateSender(topicName);
    
        // create a batch 
        using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
        for (int i = 1; i <= numOfMessages; i++)
        {
            // try adding a message to the batch
            if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
            {
                // if it is too large for the batch
                throw new Exception($"The message {i} is too large to fit in the batch.");
            }
        }
    
        try
        {
            // Use the producer client to send the batch of messages to the Service Bus topic
            await sender.SendMessagesAsync(messageBatch);
            Console.WriteLine($"A batch of {numOfMessages} messages has been published to the topic.");
        }
        finally
        {
            // Calling DisposeAsync on client types is required to ensure that network
            // resources and other unmanaged objects are properly cleaned up.
            await sender.DisposeAsync();
            await client.DisposeAsync();
        }
    
        Console.WriteLine("Press any key to end the application");
        Console.ReadKey();
    }
    
  4. Soubor program. cs by měl vypadat nějak takto:

    Další informace naleznete v tématu komentáře ke kódu.

    using System;
    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    
    namespace TopicSender
    {
        class Program
        {
            // connection string to your Service Bus namespace
            static string connectionString = "<NAMESPACE CONNECTION STRING>";
    
            // name of your Service Bus topic
            static string topicName = "<TOPIC NAME>";
    
            // the client that owns the connection and can be used to create senders and receivers
            static ServiceBusClient client;
    
            // the sender used to publish messages to the topic
            static ServiceBusSender sender;
    
            // number of messages to be sent to the topic
            private const int numOfMessages = 3;
    
            static async Task Main()
            {
                // The Service Bus client types are safe to cache and use as a singleton for the lifetime
                // of the application, which is best practice when messages are being published or read
                // regularly.
                //
                // Create the clients that we'll use for sending and processing messages.
                client = new ServiceBusClient(connectionString);
                sender = client.CreateSender(topicName);
    
                // create a batch 
                using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
                for (int i = 1; i <= numOfMessages; i++)
                {
                    // try adding a message to the batch
                    if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
                    {
                        // if it is too large for the batch
                        throw new Exception($"The message {i} is too large to fit in the batch.");
                    }
                }
    
                try
                {
                    // Use the producer client to send the batch of messages to the Service Bus topic
                    await sender.SendMessagesAsync(messageBatch);
                    Console.WriteLine($"A batch of {numOfMessages} messages has been published to the topic.");
                }
                finally
                {
                    // Calling DisposeAsync on client types is required to ensure that network
                    // resources and other unmanaged objects are properly cleaned up.
                    await sender.DisposeAsync();
                    await client.DisposeAsync();
                }
    
                Console.WriteLine("Press any key to end the application");
                Console.ReadKey();
            }
        }
    }    
    
  5. nahraďte <NAMESPACE CONNECTION STRING> připojovacím řetězcem k vašemu oboru názvů Service Bus. a nahraďte <TOPIC NAME> názvem svého Service Busho tématu.

  6. Sestavte projekt a ujistěte se, že nejsou k dispozici žádné chyby.

  7. Spusťte program a počkejte na potvrzovací zprávu.

    A batch of 3 messages has been published to the topic
    
  8. V Azure Portal postupujte podle následujících kroků:

    1. přejděte do svého oboru názvů Service Bus.

    2. na stránce přehled v dolním prostředním podokně přepněte na kartu témata a vyberte Service Bus téma. V následujícím příkladu je to mytopic .

      Vybrat téma

    3. na stránce Service Bus téma v grafu zprávy v dolní části metriky vidíte, že pro téma jsou k dispozici tři příchozí zprávy. Pokud nevidíte tuto hodnotu, počkejte několik minut a aktualizujte stránku, aby se zobrazil aktualizovaný graf.

      Zprávy odeslané do tématu

    4. V dolním podokně vyberte předplatné. V následujícím příkladu je to S1. na stránce Service Bus předplatné se zobrazí počet aktivních zpráv jako 3. Předplatné obdrželo tři zprávy, které jste poslali do tématu, ale ještě ho nevybral.

      Zprávy přijaté v rámci předplatného

Přijímání zpráv z předplatného

v této části vytvoříte konzolovou aplikaci .net Core, která přijímá zprávy z odběru Service Bus tématu.

Poznámka

v tomto rychlém startu najdete podrobné pokyny pro implementaci jednoduchého scénáře odeslání dávky zpráv do Service Bus tématu a příjem těchto zpráv z předplatného tématu. další ukázky v jiných a pokročilých scénářích najdete v tématu Service Bus ukázky .net v GitHub.

Vytvořit projekt pro příjemce

  1. V okně Průzkumník řešení klikněte pravým tlačítkem na řešení ServiceBusTopicQuickStart , přejděte na Přidat a vyberte Nový Project.
  2. Vyberte Konzolová aplikace a vyberte Další.
  3. jako název Project zadejte SubscriptionReceiver a vyberte další.
  4. Na stránce Další informace vyberte vytvořit.
  5. V okně Průzkumník řešení klikněte pravým tlačítkem na SubscriptionReceiver a vyberte nastavit jako spouštěcí Project.

Přidání balíčku Service Bus NuGet

  1. v nabídce vyberte nástroje > NuGet Správce balíčků > Správce balíčků konzole .

  2. v okně Správce balíčků konzoly potvrďte, že je pro výchozí projekt vybraná možnost SubscriptionReceiver . V takovém případě vyberte SubscriptionReceiver pomocí rozevíracího seznamu.

    obrázek znázorňující výběr projektu SubscriptionReceiver v okně konzoly Správce balíčků.

  3. spuštěním následujícího příkazu nainstalujte balíček Azure. Messaging. ServiceBus NuGet:

    Install-Package Azure.Messaging.ServiceBus
    

Přidat kód pro příjem zpráv z předplatného

  1. V programu program. cs přidejte následující using příkazy v horní části definice oboru názvů před deklaraci třídy.

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    
  2. V rámci Program třídy deklarujte následující vlastnosti těsně před Main metodou. Zástupné symboly nahraďte správnými hodnotami:

    • <NAMESPACE CONNECTION STRING>s připojovacím řetězcem k vašemu Service Bus oboru názvů
    • <TOPIC NAME>názvem vašeho Service Bus tématu
    • <SERVICE BUS - TOPIC SUBSCRIPTION NAME> názvem odběru tématu.
    // connection string to your Service Bus namespace
    static string connectionString = "<NAMESPACE CONNECTION STRING>";
    
    // name of the Service Bus topic
    static string topicName = "<SERVICE BUS TOPIC NAME>";
    
    // name of the subscription to the topic
    static string subscriptionName = "<SERVICE BUS - TOPIC SUBSCRIPTION NAME>";
    
    // the client that owns the connection and can be used to create senders and receivers
    static ServiceBusClient client;
    
    // the processor that reads and processes messages from the subscription
    static ServiceBusProcessor processor;    
    
  3. Do třídy přidejte následující metody Program pro zpracování přijatých zpráv a všech chyb.

    // handle received messages
    static async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription: {subscriptionName}");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    static Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  4. Nahraďte kód v souboru Program.cs následujícím kódem. Tady jsou důležité kroky z kódu:

    1. Vytvoří objekt ServiceBusClient pomocí připojovacího řetězce k oboru názvů.
    2. Vyvolá metodu CreateProcessor objektu ServiceBusClient k vytvoření objektu ServiceBusProcessor pro zadanou Service Bus fronty.
    3. Určuje obslužné rutiny pro události ProcessMessageAsync a ProcessErrorAsync ServiceBusProcessor objektu.
    4. Zahájí zpracování zpráv vyvoláním metody StartProcessingAsync u ServiceBusProcessor objektu .
    5. Když uživatel stiskne klávesu pro ukončení zpracování, vyvolá metodu StopProcessingAsync objektu ServiceBusProcessor .

    Další informace najdete v komentářích ke kódu.

    static async Task Main()
    {
        // The Service Bus client types are safe to cache and use as a singleton for the lifetime
        // of the application, which is best practice when messages are being published or read
        // regularly.
        //
        // Create the clients that we'll use for sending and processing messages.
        client = new ServiceBusClient(connectionString);
    
        // create a processor that we can use to process the messages
        processor = client.CreateProcessor(topicName, subscriptionName, new ServiceBusProcessorOptions());
    
        try
        {
            // add handler to process messages
            processor.ProcessMessageAsync += MessageHandler;
    
            // add handler to process any errors
            processor.ProcessErrorAsync += ErrorHandler;
    
            // start processing 
            await processor.StartProcessingAsync();
    
            Console.WriteLine("Wait for a minute and then press any key to end the processing");
            Console.ReadKey();
    
            // stop processing 
            Console.WriteLine("\nStopping the receiver...");
            await processor.StopProcessingAsync();
            Console.WriteLine("Stopped receiving messages");
        }
        finally
        {
            // Calling DisposeAsync on client types is required to ensure that network
            // resources and other unmanaged objects are properly cleaned up.
            await processor.DisposeAsync();
            await client.DisposeAsync();
        }
    }    
    
  5. Tady je, jak by Program.cs měl vypadat váš počítač:

    using System;
    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    
    namespace SubscriptionReceiver
    {
        class Program
        {
            // connection string to your Service Bus namespace
            static string connectionString = "<NAMESPACE CONNECTION STRING>";
    
            // name of the Service Bus topic
            static string topicName = "<SERVICE BUS TOPIC NAME>";
    
            // name of the subscription to the topic
            static string subscriptionName = "<SERVICE BUS - TOPIC SUBSCRIPTION NAME>";
    
            // the client that owns the connection and can be used to create senders and receivers
            static ServiceBusClient client;
    
            // the processor that reads and processes messages from the subscription
            static ServiceBusProcessor processor;
    
            // handle received messages
            static async Task MessageHandler(ProcessMessageEventArgs args)
            {
                string body = args.Message.Body.ToString();
                Console.WriteLine($"Received: {body} from subscription: {subscriptionName}");
    
                // complete the message. messages is deleted from the subscription. 
                await args.CompleteMessageAsync(args.Message);
            }
    
            // handle any errors when receiving messages
            static Task ErrorHandler(ProcessErrorEventArgs args)
            {
                Console.WriteLine(args.Exception.ToString());
                return Task.CompletedTask;
            }
    
            static async Task Main()
            {
                // The Service Bus client types are safe to cache and use as a singleton for the lifetime
                // of the application, which is best practice when messages are being published or read
                // regularly.
                //
                // Create the clients that we'll use for sending and processing messages.
                client = new ServiceBusClient(connectionString);
    
                // create a processor that we can use to process the messages
                processor = client.CreateProcessor(topicName, subscriptionName, new ServiceBusProcessorOptions());
    
                try
                {
                    // add handler to process messages
                    processor.ProcessMessageAsync += MessageHandler;
    
                    // add handler to process any errors
                    processor.ProcessErrorAsync += ErrorHandler;
    
                    // start processing 
                    await processor.StartProcessingAsync();
    
                    Console.WriteLine("Wait for a minute and then press any key to end the processing");
                    Console.ReadKey();
    
                    // stop processing 
                    Console.WriteLine("\nStopping the receiver...");
                    await processor.StopProcessingAsync();
                    Console.WriteLine("Stopped receiving messages");
                }
                finally
                {
                    // Calling DisposeAsync on client types is required to ensure that network
                    // resources and other unmanaged objects are properly cleaned up.
                    await processor.DisposeAsync();
                    await client.DisposeAsync();
                }
            }
        }
    }
    
  6. Zástupné symboly nahraďte správnými hodnotami:

    • <NAMESPACE CONNECTION STRING>s připojovacím řetězcem k vašemu Service Bus oboru názvů
    • <TOPIC NAME>názvem vašeho Service Bus tématu
    • <SERVICE BUS - TOPIC SUBSCRIPTION NAME> názvem odběru tématu.
  7. Sestavte projekt a ujistěte se, že ne dojde k žádným chybám.

  8. Spusťte přijímací aplikaci. Měly by se zobrazit přijaté zprávy. Stisknutím libovolné klávesy zastavte příjemce a aplikaci.

    Wait for a minute and then press any key to end the processing
    Received: Message 1 from subscription: S1
    Received: Message 2 from subscription: S1
    Received: Message 3 from subscription: S1
    
    Stopping the receiver...
    Stopped receiving messages
    
  9. Znovu zkontrolujte portál.

    • Na stránce Service Bus tématu se v grafu Zprávy zobrazí tři příchozí zprávy a tři odchozí zprávy. Pokud tato čísla nevidíte, počkejte několik minut a aktualizujte stránku, abyste viděli aktualizovaný graf.

      Odeslané a přijaté zprávy

    • Na stránce Service Bus Subscription se zobrazí počet aktivních zpráv jako nula. Je to proto, že příjemce přijal zprávy z tohoto odběru a dokončil zprávy.

      Počet aktivních zpráv na konci odběru

Další kroky

Projděte si následující dokumentaci a ukázky: