Compartilhar via


Introdução a tópicos e assinaturas do Barramento de Serviço do Azure (.NET)

Este guia de início rápido mostra como enviar mensagens para um tópico do Barramento de Serviço e receber mensagens de uma assinatura para esse tópico usando a biblioteca .NET Azure.Messaging.ServiceBus.

Neste guia de início rápido, você vai realizar as seguintes etapas:

  1. Crie um namespace do Barramento de Serviço usando o portal do Azure.
  2. Crie um tópico do Barramento de Serviço usando o portal do Azure.
  3. Crie uma assinatura do Barramento de Serviço para esse tópico usando o portal do Azure.
  4. Escreva um aplicativo de console .NET para enviar um conjunto de mensagens ao tópico.
  5. Escreva um aplicativo de console do .NET para receber essas mensagens da assinatura.

Observação

Este guia de início rápido apresenta instruções passo a passo para implementar um cenário simples de envio de um lote de mensagens para um tópico de Barramento de Serviço e recebimento dessas mensagens de uma assinatura do tópico. Para obter mais exemplos de outros cenários avançados, consulte Exemplos de Barramento de Serviço .NET no GitHub.

  • Este início rápido mostra duas maneiras de se conectar ao Barramento de Serviço do Azure: cadeia de conexão e sem senha. A primeira opção mostra como usar uma cadeia de conexão para se conectar a um namespace do Barramento de Serviço. A segunda opção mostra como usar sua entidade de segurança no Microsoft Entra ID e o controle de acesso baseado em função (RBAC) para se conectar a um namespace do Barramento de Serviço. Você não precisa se preocupar em ter uma cadeia de conexão embutida no código, em um arquivo de configuração ou em um armazenamento seguro, como o Azure Key Vault. Se você é novo no Azure, talvez a opção de cadeia de caracteres de conexão seja mais fácil de seguir. É recomendável usar a opção sem senha em aplicativos do mundo real e ambientes de produção. Para obter mais informações, confira Autenticação e autorização.

Pré-requisitos

Se não conhecer muito bem o serviço, confira a Visão geral do Barramento de Serviço antes de começar com este guia de início rápido.

  • Assinatura do Azure. Para usar os serviços do Azure, incluindo o Barramento de Serviço do Azure, você precisa ter uma assinatura. Caso tenha uma conta do Azure, poderá se inscrever em uma avaliação gratuita.
  • Visual Studio 2022. O aplicativo de exemplo usa novos recursos que foram introduzidos no C# 10. Ainda pode utilizar a biblioteca de clientes do Barramento de Serviço com versões anteriores da linguagem C#, mas a sintaxe pode variar. Para usar a sintaxe mais recente, recomendamos instalar o .NET 6.0 ou superior e configurar a versão da linguagem como latest. Se você estiver usando o Visual Studio, as versões anteriores ao Visual Studio 2022 não serão compatíveis com as ferramentas necessárias para compilar projetos do C# 10.

Criar um namespace no Portal do Azure

Para começar a usar as entidades de mensagens do Barramento de Serviço no Azure, primeiro é necessário criar um namespace com um nome exclusivo no Azure. Um namespace fornece um contêiner de escopo para recursos do Barramento de Serviço (filas, tópicos, etc.) dentro de seu aplicativo.

Para criar um namespace:

  1. Entre no portal do Azure.

  2. Navegue até Página Todos os serviços.

  3. Na barra de navegação à esquerda, selecione Integração na lista de categorias. Passe o mouse sobre Barramento de Serviço e, em seguida, selecione o botão + no bloco do Barramento de Serviço.

    Imagem mostrando a seleção de Criar um recurso, Integração e, por fim, Barramento de Serviço no menu.

  4. Na marca Informações Básicas da página Criar namespace, siga estas etapas:

    1. Em Assinatura, escolha uma assinatura do Azure na qual criar o namespace.

    2. Em Grupo de recursos, escolha um grupo de recursos existente ou crie um.

    3. Insira um nome para o namespace. O nome do namespace deve estar de acordo com as convenções de nomenclatura abaixo:

      • O nome deve ser exclusivo em todo o Azure. O sistema imediatamente verifica para ver se o nome está disponível.
      • O nome deve ter no mínimo seis e no máximo 50 caracteres.
      • O nome pode conter apenas letras, números e hifens -.
      • O nome precisa começar com uma letra e terminar com uma letra ou um número.
      • O nome não termina com -sb ou -mgmt.
    4. Em Localização, escolha a região na qual o namespace deve ser hospedado.

    5. Selecione o Tipo de preço (Básico, Standard ou Premium) do namespace. Para esse início rápido, selecione Padrão.

    6. Se você escolher a camada Premium, selecione se pode habilitar a replicação geográfica para o namespace. O recurso de replicação geográfica garante que os metadados e os dados de um namespace sejam replicados continuamente de uma região primária para uma ou mais regiões secundárias.

      Importante

      Se você quiser usar tópicos e assinaturas, escolha Standard ou Premium. Não há suporte para os tópicos/assinaturas no tipo de preço básico.

      Se você selecionou o tipo de preço Premium, especifique o número de unidades do sistema de mensagens. A camada Premium fornece isolamento de recursos no nível de CPU e memória, de modo que cada carga de trabalho seja executada isoladamente. Esse contêiner de recursos é chamado de unidade do sistema de mensagens. Um namespace premium tem pelo menos uma unidade do sistema de mensagens. Você pode selecionar 1, 2, 4, 8 ou 16 unidades do sistema de mensagens para cada namespace Premium do Barramento de Serviço. Para saber mais, confira Sistema de Mensagens Premium do Barramento de Serviço.

    7. Selecione Revisar + criar na parte inferior da página.

      Imagem mostrando a página Criar um namespace

    8. Na páginaRevisar + criar,revise as configurações e selecioneCriar.

  5. Depois que a implantação do recurso for bem-sucedida, selecione Ir para o recurso na página de implantação.

    Imagem mostrando a página implantação bem-sucedida com o link Ir para o recurso.

  6. Você verá a home page do namespace do barramento de serviço.

    Imagem mostrando a home page do namespace Barramento de Serviço criado.

Criar um tópico usando o portal do Azure

  1. Na página Namespace do Barramento de Serviço, expanda Entidades no menu de navegação à esquerda e selecione Tópicos no menu à esquerda.

  2. Selecione + Tópico na barra de ferramentas.

  3. Insira um nome para o tópico. Deixe as outras opções com os valores padrão.

  4. Selecione Criar.

    Imagem mostrando a página Criar um Tópico.

Criar uma assinatura para o tópico

  1. Selecione o tópico que você criou na seção anterior.

    Imagem mostrando a seleção de tópico na lista de tópicos.

  2. Na página Tópico de Barramento de Serviço, selecione + Assinatura na barra de ferramentas.

    Imagem mostrando o botão Adicionar assinatura.

  3. Na página Criar assinatura, siga estas etapas:

    1. Insira S1 em Nome da assinatura.

    2. Insira 3 em Contagem máxima de entregas.

    3. Em seguida, selecione Criar para criar a assinatura.

      Imagem mostrando a página Criar assinatura.

Autenticar o aplicativo no Azure

Este início rápido mostra duas maneiras de se conectar ao Barramento de Serviço do Azure: sem senha e cadeia de conexão.

A primeira opção mostra como usar sua entidade de segurança no Microsoft Entra ID e o RBAC (controle de acesso baseado em função) para se conectar a um namespace do Barramento de Serviço. Você não precisa se preocupar em ter uma cadeia de conexão embutida no código, em um arquivo de configuração ou em um armazenamento seguro, como o Azure Key Vault.

A segunda opção mostra como usar uma cadeia de conexão para se conectar a um namespace do Barramento de Serviço. Se você for novo no Azure, poderá achar a opção de cadeia de conexão mais fácil de ser seguida. É recomendável usar a opção sem senha em aplicativos do mundo real e ambientes de produção. Para obter mais informações, confira Autenticação e autorização. Você também pode ler mais sobre a autenticação sem senha na página de visão geral.

Atribuir funções ao usuário do Microsoft Entra

Ao desenvolver localmente, a conta de usuário que se conecta ao Barramento de Serviço do Azure deve ter as permissões corretas. Você precisará da função Proprietário de Dados do Barramento de Serviço do Azure para enviar e receber mensagens. Para atribuir essa função a si mesmo, você precisará da função Administrador de acesso do usuário ou de outra função que inclua a ação Microsoft.Authorization/roleAssignments/write. É possível atribuir funções RBAC do Azure a um usuário usando o portal do Azure, a CLI do Azure ou o Azure PowerShell. Saiba mais sobre os escopos disponíveis para atribuições de função na página de visão geral do escopo.

O exemplo a seguir atribui a função Azure Service Bus Data Owner à sua conta de usuário, que fornece acesso completo aos recursos do Barramento de Serviço do Azure. Em um cenário real, siga o Princípio do Privilégio Mínimo para dar aos usuários apenas as permissões mínimas necessárias para um ambiente de produção mais seguro.

Funções internas do Azure para o Barramento de Serviço do Azure

Para o Barramento de Serviço do Azure, o gerenciamento de namespaces e de todos os recursos relacionados por meio do portal do Azure e da API de gerenciamento de recursos do Azure já está protegido pelo modelo RBAC do Azure. O Azure fornece as funções internas do Azure abaixo para autorizar o acesso a um namespace do Barramento de Serviço:

Se você quiser criar uma função personalizada, consulte Direitos exigidos para operações do Barramento de Serviço.

Adicionar usuário do Microsoft Entra à função Proprietário do Barramento de Serviço do Azure

Adicione seu nome de usuário do Microsoft Entra à função de Proprietário de Dados do Barramento de Serviço do Azure no nível do namespace do Barramento de Serviço. Ele permitirá que um aplicativo em execução no contexto de sua conta de usuário envie mensagens para uma fila ou um tópico e receba mensagens de uma fila ou assinatura de um tópico.

Importante

Na maioria dos casos, levará um ou dois minutos para a atribuição de função se propagar no Azure. Em casos raros, poderá levar até oito minutos. Se você receber erros de autenticação ao executar o código pela primeira vez, aguarde alguns instantes e tente novamente.

  1. Se você a página Namespace do Barramento de Serviço não estiver aberta no portal do Azure, localize o namespace do Barramento de Serviço usando a barra de pesquisa principal ou a navegação à esquerda.

  2. Na página de visão geral, selecione Controle de acesso (IAM) no menu à esquerda.

  3. Na página Controle de acesso (IAM), selecione a guia Atribuições de função.

  4. Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu suspenso resultante.

    Captura de tela mostrando como atribuir uma função.

  5. Use a caixa de pesquisa para filtrar os resultados para a função desejada. Neste exemplo, pesquise Azure Service Bus Data Owner e selecione o resultado correspondente. Em seguida, escolha Avançar.

  6. Em Atribuir acesso a, selecione Usuário, grupo ou entidade de serviço e, em seguida, selecione + Selecionar membros.

  7. No diálogo, pesquise seu nome de usuário do Microsoft Entra (geralmente seu endereço de email user@domain) e escolha Selecionar na parte inferior do diálogo.

  8. Selecione Revisar + atribuir para ir para a página final e, em seguida, Revisar + atribuir novamente para concluir o processo.

Iniciar o Visual Studio e entrar no Azure

Você pode autorizar o acesso ao namespace do barramento de serviço usando as seguintes etapas:

  1. Inicie o Visual Studio. Se você vir a janela Introdução, selecione o link Continuar sem código no painel direito.

  2. Selecione o botão Entrar no canto superior direito do Visual Studio.

    Captura de tela mostrando o botão para entrar no Azure usando o Visual Studio.

  3. Entre usando a conta do Microsoft Entra à qual você atribuiu uma função anteriormente.

    Captura de tela mostrando a seleção da conta.

Enviar mensagens para o tópico

Esta seção mostra como criar um aplicativo de console .NET para enviar mensagens para um tópico do Barramento de Serviço.

Observação

Este guia de início rápido apresenta instruções passo a passo para implementar um cenário simples de envio de um lote de mensagens para um tópico de Barramento de Serviço e recebimento dessas mensagens de uma assinatura do tópico. Para obter mais exemplos de outros cenários avançados, consulte Exemplos de Barramento de Serviço .NET no GitHub.

Criar um aplicativo de console

  1. No Visual Studio, selecione o menu Arquivo ->Novo ->Projeto.
  2. Na caixa de diálogo Criar um projeto, execute as seguintes etapas: Se essa caixa de diálogo não for exibida, selecione Arquivo no menu, Novo e, em seguida, Projeto.
    1. Selecione C# como a linguagem de programação.

    2. Selecione Console como o tipo do aplicativo.

    3. Selecione Aplicativo de Console na lista de resultados.

    4. Em seguida, selecione Avançar.

      Imagem mostrando a caixa de diálogo Criar um projeto, com C# e Console selecionados

  3. Insira TopicSender no nome do projeto, ServiceBusTopicQuickStart no nome da solução e selecione Próximo.
  4. Na página Informações adicionais, selecione Criar para criar a solução e o projeto.

Adicionar os pacotes do NuGet ao projeto

  1. Selecione Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes no menu.

  2. Execute o comando a seguir para instalar o pacote NuGet Azure.Messaging.ServiceBus.

    Install-Package Azure.Messaging.ServiceBus
    
  3. Execute o comando a seguir para instalar o pacote NuGet Azure.Identity.

    Install-Package Azure.Identity
    

Adicionar um código para enviar mensagens para o tópico

  1. Substitua os conteúdos do Program.cs pelo código a seguir. As etapas importantes estão descritas nesta seção, com informações adicionais nos comentários do código.

    1. Cria um objeto ServiceBusClient usando o objeto DefaultAzureCredential. DefaultAzureCredential descobre e usa automaticamente as credenciais de sua entrada do Visual Studio para autenticar no Barramento de Serviço do Azure.
    2. Invoca o método CreateSender no objeto ServiceBusClient a fim de criar um objeto ServiceBusSender para o tópico específico do Barramento de Serviço.
    3. Cria um objeto do ServiceBusMessageBatch usando o ServiceBusSender.CreateMessageBatchAsync.
    4. Adiciona mensagens ao lote usando o método ServiceBusMessageBatch.TryAddMessage.
    5. Envia o lote de mensagens ao tópico do Barramento de Serviço usando o método ServiceBusSender.SendMessagesAsync.

    Importante

    Atualize os valores do espaço reservado (<NAMESPACE-NAME> e <TOPIC-NAME>) no snippet de código com os nomes do namespace e do tópico do Barramento de Serviço.

    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 sender used to publish messages to the topic
    ServiceBusSender sender;
    
    // number of messages to be sent to the topic
    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.
    
    //TODO: Replace the "<NAMESPACE-NAME>" and "<TOPIC-NAME>" placeholders.
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    sender = client.CreateSender("<TOPIC-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 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();
    
  2. Compile o projeto e verifique se não há erros.

  3. Execute o programa e aguarde a mensagem de confirmação.

    A batch of 3 messages has been published to the topic
    

    Importante

    Na maioria dos casos, levará um ou dois minutos para a atribuição de função se propagar no Azure. Em casos raros, pode demorar até oito minutos. Se você receber erros de autenticação ao executar o código pela primeira vez, aguarde alguns instantes e tente novamente.

  4. No portal do Azure, siga estas etapas:

    1. Acesse o namespace do Barramento de Serviço.

    2. Na página Visão geral, no painel inferior central, alterne para a guia Tópicos e selecione o tópico do Barramento de Serviço. No exemplo a seguir, ele é mytopic.

      Selecionar tópico

    3. Na página Tópico do Barramento de Serviço, no gráfico Mensagens da seção inferior Métricas, você verá que há três mensagens de entrada para o tópico. Se o valor não for exibido, aguarde alguns minutos e atualize a página para ver o gráfico atualizado.

      Mensagens enviadas para o tópico

    4. Selecione a assinatura no painel inferior. No exemplo a seguir, ela é S1. Na página Assinatura do Barramento de Serviço, você verá a Contagem de mensagens ativas como 3. A assinatura recebeu as três mensagens que você enviou para o tópico, mas nenhum destinatário as selecionou ainda.

      Mensagens recebidas na assinatura

Receber mensagens de uma assinatura

Nesta seção, crie um aplicativo de console .NET que receba mensagens da assinatura do tópico do Barramento de Serviço do Azure.

Observação

Este guia de início rápido apresenta instruções passo a passo para implementar um cenário simples de envio de um lote de mensagens para um tópico de Barramento de Serviço e recebimento dessas mensagens de uma assinatura do tópico. Para obter mais exemplos de outros cenários avançados, consulte Exemplos de Barramento de Serviço .NET no GitHub.

Criar um projeto para o receptor

  1. Na janela do Gerenciador de Soluções, clique com o botão direito do mouse na solução ServiceBusTopicQuickStart, aponte para Adicionar e selecione Novo projeto.
  2. Selecione Aplicativo de console e Próximo.
  3. Insira SubscriptionReceiver para o nome Project eselecione Próximo.
  4. Na página Informações adicionais, selecione Criar.
  5. Na janela Gerenciador de Soluções, clique com o botão direito do mouse em SubscriptionReceiver e selecione Definir como um Projeto de Inicialização.

Adicionar os pacotes do NuGet ao projeto

  1. Selecione Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes no menu.

  2. Selecione SubscriptionReceiver para a lista suspensa Projeto padrão.

  3. Execute o comando a seguir para instalar o pacote NuGet Azure.Messaging.ServiceBus.

    Install-Package Azure.Messaging.ServiceBus
    
  4. Execute o comando a seguir para instalar o pacote NuGet Azure.Identity.

    Install-Package Azure.Identity
    

Adicione o código para receber mensagens da assinatura

Nesta seção, adicione o código para recuperar mensagens da assinatura.

  1. Substitua o conteúdo existente das Program.cs seguintes propriedades e métodos:

    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 subscription
    ServiceBusProcessor processor;    
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  2. Acrescente o código a seguir ao final de Program.cs.

    • Cria um objeto ServiceBusClient usando o objeto DefaultAzureCredential. DefaultAzureCredential descobre e usa automaticamente as credenciais de sua entrada do Visual Studio para autenticar no Barramento de Serviço do Azure.
    • Invoca o método CreateProcessor no objeto ServiceBusClient para criar um objeto ServiceBusProcessor para o tópico do Barramento de Serviço especificado.
    • Especifica os manipuladores dos eventos ProcessMessageAsync e ProcessErrorAsync do objeto ServiceBusProcessor.
    • Inicia o processamento de mensagens invocando o método StartProcessingAsync no objeto ServiceBusProcessor.
    • Quando o usuário pressionar uma tecla para encerrar o processamento, ele invocará o método StopProcessingAsync no objeto ServiceBusProcessor.

    Importante

    Atualize os valores do espaço reservado (<NAMESPACE-NAME>, <TOPIC-NAME> e <SUBSCRIPTION-NAME>) no snippet de código com os nomes do namespace, tópico e assinatura do Barramento de Serviço.

    Para obter mais informações, consulte comentários de código.

    // 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.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-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();
    }
    
  3. Veja como Program.cs deve ficar:

    using System;
    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 subscription
    ServiceBusProcessor processor;
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
    // 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.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-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. Compile o projeto e verifique se não há erros.

  5. Execute o aplicativo receptor. Você verá as mensagens recebidas. Pressione qualquer tecla para interromper o recebimento e o aplicativo.

    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
    
  6. Verifique o portal novamente.

    • Na página Tópico do Barramento de Serviço, no gráfico Mensagens, você verá três mensagens de entrada e três mensagens de saída. Se esses números não forem exibidos, aguarde alguns minutos e atualize a página para ver o gráfico atualizado.

      Mensagens enviadas e recebidas

    • Na página Assinatura do Barramento de Serviço, você verá a Contagem de mensagens ativas como zero. Isso ocorre porque um receptor recebeu mensagens dessa assinatura e concluiu as mensagens.

      Contagem de mensagens ativas na assinatura no final

Próximas etapas

Confira os seguintes exemplos e a documentação: