Rychlý start: Odesílání a příjem zpráv z fronty služby Azure Service Bus (.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 frontu služby Service Bus.

  3. Napište konzolovou aplikaci .NET, která odešle sadu zpráv do fronty.

  4. Napište konzolovou aplikaci .NET pro příjem těchto zpráv z fronty.

    Poznámka:

    Tento rychlý start obsahuje podrobné pokyny k implementaci jednoduchého scénáře odeslání dávky zpráv do fronty služby Service Bus a jejich přijetí. Přehled klientské knihovny .NET najdete v klientské knihovně služby Azure Service Bus pro .NET. Další ukázky najdete v ukázkách service bus .NET na GitHubu.

Požadavky

Pokud s touto službou teprve začínáte, přečtěte si před tímto rychlým startem přehled služby Service Bus.

  • Předplatné Azure. Pokud chcete používat služby Azure, včetně Služby Azure Service Bus, potřebujete předplatné. Pokud nemáte existující účet Azure, můžete si zaregistrovat bezplatnou zkušební verzi.
  • Visual Studio 2022. Ukázková aplikace využívá nové funkce, které byly zavedeny v jazyce C# 10. Stále můžete používat klientskou knihovnu Service Bus s předchozími jazykovými verzemi jazyka C#, ale syntaxe se může lišit. Pokud chcete použít nejnovější syntaxi, doporučujeme nainstalovat .NET 6.0 nebo novější a nastavit jazyk latestna verzi . Pokud používáte Visual Studio, verze před sadou Visual Studio 2022 nejsou kompatibilní s nástroji potřebnými k sestavení projektů C# 10.

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 oborů pro prostředky služby Service Bus (fronty, témata atd.) v rámci vaší aplikace.

Vytvoření oboru názvů:

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

  2. Přejděte na stránku Všechny služby.

  3. Na levém navigačním panelu vyberte Možnost Integrace ze seznamu kategorií, najeďte myší na Service Bus a pak vyberte + tlačítko na dlaždici Service Bus.

    Image showing selection of Create a resource, Integration, and then Service Bus in the menu.

  4. Na stránce Základy na stránce Vytvořit obor názvů postupujte takto:

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

    2. V části Skupina prostředků zvolte existující skupinu prostředků, ve které bude obor názvů aktivní, nebo vytvořte novou.

    3. Zadejte název oboru názvů. Název oboru názvů by měl dodržovat následující zásady vytváření názvů:

      • Název musí být jedinečný v rámci Azure. Systém okamžitě kontroluje, jestli je název dostupný.
      • Délka názvu je nejméně 6 a maximálně 50 znaků.
      • Název může obsahovat pouze písmena, číslice, pomlčky -.
      • Název musí začínat písmenem a končit písmenem nebo číslem.
      • Název nekončí "-sb" nebo "-mgmt".
    4. V části Umístění zvolte oblast, ve které má být váš obor názvů hostovaný.

    5. V části Cenová úroveň vyberte cenovou úroveň (Basic, Standard nebo Premium) pro obor názvů. Pro účely tohoto rychlého startu vyberte Standard.

      Důležité

      Pokud chcete použít témata a předplatná, zvolte Standard nebo Premium. Témata nebo předplatná se nepodporují 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 každá úloha běžela 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ý obor názvů služby Service Bus Premium můžete vybrat 1, 2, 4, 8 nebo 16 jednotek zasílání zpráv. Další informace najdete v tématu Zasílání zpráv Service Bus Premium.

    6. Vyberte Zkontrolovat a vytvořit v dolní části stránky.

      Image showing the Create a namespace page

    7. Na stránce Zkontrolovat a vytvořit zkontrolujte nastavení a vyberte Vytvořit.

  5. Po úspěšném nasazení prostředku vyberte na stránce nasazení možnost Přejít k prostředku .

    Image showing the deployment succeeded page with the Go to resource link.

  6. Zobrazí se domovská stránka vašeho oboru názvů služby Service Bus.

    Image showing the home page of the Service Bus namespace created.

Vytvoření fronty na webu Azure Portal

  1. Na stránce Obor názvů služby Service Bus vyberte fronty v levé navigační nabídce.

  2. Na stránce Fronty vyberte na panelu nástrojů + Fronta.

  3. Zadejte název fronty a ostatní hodnoty ponechte ve výchozím nastavení.

  4. Teď vyberte Vytvořit.

    Image showing creation of a queue in the portal

Důležité

Pokud s Azure začínáte, můžete najít možnost Připojení ion String snadněji sledovat. Výběrem karty Připojení ion String (Řetězec) zobrazíte pokyny k použití připojovací řetězec v tomto rychlém startu. Doporučujeme používat možnost bez hesla v reálných aplikacích a produkčních prostředích.

Ověření aplikace v Azure

Tento rychlý start ukazuje dva způsoby připojení ke službě Azure Service Bus: bez hesla a připojovací řetězec.

První možnost ukazuje, jak se pomocí objektu zabezpečení v Microsoft Entra ID a řízení přístupu na základě role (RBAC) připojit k oboru názvů služby Service Bus. Nemusíte se starat o pevně zakódované připojovací řetězec v kódu nebo v konfiguračním souboru nebo v zabezpečeném úložišti, jako je Azure Key Vault.

Druhá možnost ukazuje, jak se pomocí připojovací řetězec připojit k oboru názvů služby Service Bus. Pokud s Azure začínáte, možná zjistíte, že připojovací řetězec možnost bude jednodušší postupovat. Doporučujeme používat možnost bez hesla v reálných aplikacích a produkčních prostředích. Další informace najdete v tématu Ověřování a autorizace. Další informace o ověřování bez hesla najdete na stránce přehledu.

Přiřazení rolí uživateli Microsoft Entra

Při místním vývoji se ujistěte, že uživatelský účet, který se připojuje ke službě Azure Service Bus, má správná oprávnění. K odesílání a příjmu zpráv budete potřebovat roli Vlastník dat služby Azure Service Bus. K přiřazení této role budete potřebovat roli Uživatelský přístup Správa istrator nebo jinou roli, která tuto akci zahrnujeMicrosoft.Authorization/roleAssignments/write. Role Azure RBAC můžete uživateli přiřadit pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu. Další informace o dostupných oborech pro přiřazení rolí najdete na stránce přehledu oboru.

Následující příklad přiřadí roli k vašemu uživatelskému Azure Service Bus Data Owner účtu, který poskytuje úplný přístup k prostředkům služby Azure Service Bus. V reálném scénáři postupujte podle principu nejnižšího oprávnění , aby uživatelům poskytla pouze minimální oprávnění potřebná pro bezpečnější produkční prostředí.

Předdefinované role Azure pro Azure Service Bus

Pro Službu Azure Service Bus je správa oborů názvů a všech souvisejících prostředků prostřednictvím webu Azure Portal a rozhraní API pro správu prostředků Azure už chráněná pomocí modelu Azure RBAC. Azure poskytuje následující předdefinované role Azure pro autorizaci přístupu k oboru názvů služby Service Bus:

  • Vlastník dat služby Azure Service Bus: Umožňuje přístup k datům k oboru názvů služby Service Bus a jeho entitám (fronty, témata, odběry a filtry). Člen této role může odesílat a přijímat zprávy z front nebo témat nebo odběrů.
  • Odesílatel dat služby Azure Service Bus: Pomocí této role můžete udělit přístup k oboru názvů služby Service Bus a jeho entitám.
  • Příjemce dat služby Azure Service Bus: Pomocí této role můžete udělit přístup k oboru názvů služby Service Bus a jeho entitám.

Pokud chcete vytvořit vlastní roli, přečtěte si téma Práva potřebná pro operace služby Service Bus.

Přidání uživatele Microsoft Entra do role vlastníka služby Azure Service Bus

Přidejte své uživatelské jméno Microsoft Entra do role Vlastník dat služby Azure Service Bus na úrovni oboru názvů služby Service Bus. Umožní aplikaci spuštěnou v kontextu vašeho uživatelského účtu odesílat zprávy do fronty nebo tématu a přijímat zprávy z fronty nebo odběru tématu.

Důležité

Ve většině případů bude trvat minutu nebo dvě, než se přiřazení role rozšíří v Azure. Ve výjimečných případech může trvat až osm minut. Pokud při prvním spuštění kódu dojde k chybám ověřování, chvíli počkejte a zkuste to znovu.

  1. Pokud nemáte na webu Azure Portal otevřenou stránku Obor názvů služby Service Bus, najděte obor názvů služby Service Bus pomocí hlavního vyhledávacího panelu nebo levé navigace.

  2. Na stránce přehledu vyberte v nabídce vlevo řízení přístupu (IAM ).

  3. Na stránce Řízení přístupu (IAM) vyberte kartu Přiřazení rolí.

  4. V horní nabídce vyberte + Přidat a potom přidejte přiřazení role z výsledné rozevírací nabídky.

    A screenshot showing how to assign a role.

  5. Pomocí vyhledávacího pole vyfiltrujte výsledky podle požadované role. V tomto příkladu vyhledejte Azure Service Bus Data Owner a vyberte odpovídající výsledek. Pak zvolte Další.

  6. V části Přiřadit přístup vyberte Uživatel, skupina nebo instanční objekt a pak zvolte + Vybrat členy.

  7. V dialogovém okně vyhledejte své uživatelské jméno Microsoft Entra (obvykle vaše user@domain e-mailová adresa) a pak v dolní části dialogového okna zvolte Vybrat .

  8. Vyberte Zkontrolovat a přiřadit přejděte na poslední stránku a pak proces dokončete opětovnou kontrolou a přiřazením .

Spuštění sady Visual Studio a přihlášení k Azure

Přístup k oboru názvů služby Service Bus můžete autorizovat pomocí následujícího postupu:

  1. Spusťte Visual Studio. Pokud se zobrazí okno Začínáme , vyberte v pravém podokně odkaz Pokračovat bez kódu .

  2. V pravém horním rohu sady Visual Studio vyberte tlačítko Přihlásit se.

    Screenshot showing a button to sign in to Azure using Visual Studio.

  3. Přihlaste se pomocí účtu Microsoft Entra, kterému jste přiřadili roli dříve.

    Screenshot showing the account selection.

Zasílání zpráv do fronty

V této části se dozvíte, jak vytvořit konzolovou aplikaci .NET pro odesílání zpráv do fronty služby Service Bus.

Poznámka:

Tento rychlý start obsahuje podrobné pokyny k implementaci jednoduchého scénáře odeslání dávky zpráv do fronty služby Service Bus a jejich přijetí. Další ukázky v jiných a pokročilých scénářích najdete v ukázkách .NET služby Service Bus na GitHubu.

Vytvoření konzolové aplikace

  1. V sadě Visual Studio vyberte nabídku Soubor ->Nový ->Projekt .

  2. 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 Nový a pak vyberte Projekt.

    1. Vyberte jazyk C# pro programovací jazyk.

    2. Vyberte konzolu pro typ aplikace.

    3. V seznamu výsledků vyberte konzolovou aplikaci .

    4. Pak vyberte Další.

      Image showing the Create a new project dialog box with C# and Console selected

  3. Zadejte QueueSender pro název projektu, ServiceBusQueueQuickStart pro název řešení a pak vyberte Další.

    Image showing the solution and project names in the Configure your new project dialog box

  4. Na stránce Další informace vyberte Vytvořit, abyste vytvořili řešení a projekt.

Přidání balíčků NuGet do projektu

  1. V nabídce vyberte Nástroje>NuGet Správce balíčků> Správce balíčků Konzola.

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

    Install-Package Azure.Messaging.ServiceBus
    
  3. Spuštěním následujícího příkazu nainstalujte balíček NuGet Azure.Identity .

    Install-Package Azure.Identity
    

Přidání kódu pro odesílání zpráv do fronty

  1. Nahraďte obsah Program.cs následujícím kódem. Důležité kroky jsou popsané v následující části s dalšími informacemi v komentářích ke kódu.

    Důležité

    Aktualizujte zástupné hodnoty (<NAMESPACE-NAME> a <QUEUE-NAME>) v fragmentu kódu s názvy oboru názvů a fronty služby Service Bus.

    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // name of your Service Bus queue
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the sender used to publish messages to the queue
    ServiceBusSender sender;
    
    // number of messages to be sent to the queue
    const int numOfMessages = 3;
    
    // 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.
    //
    // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses the port 443. 
    // If you use the default AmqpTcp, ensure that ports 5671 and 5672 are open.
    var clientOptions = new ServiceBusClientOptions
    { 
        TransportType = ServiceBusTransportType.AmqpWebSockets
    };
    //TODO: Replace the "<NAMESPACE-NAME>" and "<QUEUE-NAME>" placeholders.
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential(),
        clientOptions);
    sender = client.CreateSender("<QUEUE-NAME>");
    
    // 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 queue
        await sender.SendMessagesAsync(messageBatch);
        Console.WriteLine($"A batch of {numOfMessages} messages has been published to the queue.");
    }
    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();
    
  2. Sestavte projekt a ujistěte se, že nedošlo k žádným chybám.

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

    A batch of 3 messages has been published to the queue
    

    Důležité

    Ve většině případů bude trvat minutu nebo dvě, než se přiřazení role rozšíří v Azure. Ve výjimečných případech může trvat až osm minut. Pokud při prvním spuštění kódu dojde k chybám ověřování, chvíli počkejte a zkuste to znovu.

  4. Na webu Azure Portal postupujte takto:

    1. Přejděte do oboru názvů služby Service Bus.

    2. Na stránce Přehled vyberte frontu v dolním prostředním podokně.

      Image showing the Service Bus Namespace page in the Azure portal with the queue selected.

    3. Všimněte si hodnot v části Základy .

      Image showing the number of messages received and the size of the queue.

    Všimněte si následujících hodnot:

    • Hodnota počtu aktivních zpráv pro frontu je teď 3. Pokaždé, když spustíte tuto aplikaci odesílatele bez načtení zpráv, se tato hodnota zvýší o 3.
    • Aktuální velikost fronty se zvýší při každém přidání zpráv do fronty.
    • V grafu Zprávy v dolní části Metriky vidíte, že fronta obsahuje tři příchozí zprávy.

Přijetí zpráv z fronty

V této části vytvoříte konzolovou aplikaci .NET, která přijímá zprávy z fronty.

Poznámka:

Tento rychlý start obsahuje podrobné pokyny k implementaci scénáře odeslání dávky zpráv do fronty služby Service Bus a jejich následnému přijetí. Další ukázky v jiných a pokročilých scénářích najdete v ukázkách .NET služby Service Bus na GitHubu.

Vytvoření projektu pro příjemce

  1. V okně Průzkumník řešení klikněte pravým tlačítkem na řešení ServiceBusQueueQuickStart, přejděte na příkaz Přidat a vyberte Nový projekt.
  2. Vyberte Konzolová aplikace a vyberte Další.
  3. Jako název projektu zadejte QueueReceivera vyberte Vytvořit.
  4. V okně Průzkumník řešení klikněte pravým tlačítkem na QueueReceiver a vyberte Nastavit jako spouštěný projekt.

Přidání balíčků NuGet do projektu

  1. V nabídce vyberte Nástroje>NuGet Správce balíčků> Správce balíčků Konzola.

  2. Vyberte QueueReceiver pro výchozí projekt.

    Screenshot showing QueueReceiver project selected in the Package Manager Console.

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

    Install-Package Azure.Messaging.ServiceBus
    
  4. Spuštěním následujícího příkazu nainstalujte balíček NuGet Azure.Identity .

    Install-Package Azure.Identity
    

Přidání kódu pro příjem zpráv z fronty

V této části přidáte kód pro načtení zpráv z fronty.

  1. Program Do třídy přidejte následující kód:

    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Messaging.ServiceBus;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the queue
    ServiceBusProcessor processor;
    
  2. Na konec Program třídy připojte následující metody.

    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body}");
    
        // complete the message. message is deleted from the queue. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  3. Na konec Program třídy připojte následující kód. Důležité kroky jsou popsané v následující části s dalšími informacemi v komentářích ke kódu.

    Důležité

    Aktualizujte zástupné hodnoty (<NAMESPACE-NAME> a <QUEUE-NAME>) v fragmentu kódu s názvy oboru názvů a fronty služby Service Bus.

    // 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.
    //
    // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses port 443. 
    // If you use the default AmqpTcp, make sure that ports 5671 and 5672 are open.
    
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    var clientOptions = new ServiceBusClientOptions()
    {
        TransportType = ServiceBusTransportType.AmqpWebSockets
    };
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential(),
        clientOptions);
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <QUEUE-NAME> placeholder
    processor = client.CreateProcessor("<QUEUE-NAME>", 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();
    }
    
  4. Dokončená Program třída by měla odpovídat následujícímu kódu:

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the queue
    ServiceBusProcessor processor;
    
    // 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.
    //
    // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses port 443.
    // If you use the default AmqpTcp, make sure that ports 5671 and 5672 are open.
    
    // TODO: Replace the <NAMESPACE-NAME> and <QUEUE-NAME> placeholders
    var clientOptions = new ServiceBusClientOptions() 
    {
        TransportType = ServiceBusTransportType.AmqpWebSockets
    };
    client = new ServiceBusClient("<NAMESPACE-NAME>.servicebus.windows.net", 
        new DefaultAzureCredential(), clientOptions);
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <QUEUE-NAME> placeholder
    processor = client.CreateProcessor("<QUEUE-NAME>", 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();
    }
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body}");
    
        // complete the message. message is deleted from the queue. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  5. Sestavte projekt a ujistěte se, že nedošlo k žádným chybám.

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

    Wait for a minute and then press any key to end the processing
    Received: Message 1
    Received: Message 2
    Received: Message 3
    
    Stopping the receiver...
    Stopped receiving messages
    
  7. Znovu zkontrolujte portál. Počkejte několik minut a aktualizujte stránku, pokud se nezobrazují 0aktivní zprávy.

    • Počet aktivních zpráv a hodnoty Aktuální velikost jsou nyní 0.

    • V grafu Zprávy v dolní části Metriky vidíte, že ve frontě jsou tři příchozí zprávy a tři odchozí zprávy.

      Screenshot showing active messages and size after receive.

Vyčištění prostředků

Přejděte do oboru názvů služby Service Bus na webu Azure Portal a výběrem možnosti Odstranit na webu Azure Portal odstraňte obor názvů a frontu v něm.

Viz také

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

Další kroky