Exercício: Enviar e receber mensagens de uma fila do Service Bus usando o .NET.

Concluído

Neste exercício você aprende a:

  • Crie um namespace e uma fila do Barramento de Serviço usando a CLI do Azure.
  • Crie um aplicativo de console .NET para enviar e receber mensagens da fila.

Pré-requisitos

Iniciar sessão no Azure

Nesta seção, você abre seu terminal e cria algumas variáveis usadas durante o resto do exercício para tornar a entrada de comando e a criação de nome de recurso exclusivo um pouco mais fáceis.

  1. Inicie o Azure Cloud Shell e selecione Bash e o ambiente.

  2. Crie variáveis usadas nos comandos da CLI do Azure. Substitua <myLocation> por uma região perto de você.

    myLocation=<myLocation>
    myNameSpaceName=az204svcbus$RANDOM
    

Criar recursos do Azure

  1. Crie um grupo de recursos para armazenar os recursos do Azure que você está criando.

    az group create --name az204-svcbus-rg --location $myLocation
    
  2. Crie um namespace de mensagens do Service Bus. O comando a seguir cria um namespace usando a variável criada anteriormente. A operação leva alguns minutos para ser concluída.

    az servicebus namespace create \
        --resource-group az204-svcbus-rg \
        --name $myNameSpaceName \
        --location $myLocation
    
  3. Criar uma fila do Service Bus

    az servicebus queue create --resource-group az204-svcbus-rg \
        --namespace-name $myNameSpaceName \
        --name az204-queue
    

Recuperar a cadeia de conexão para o namespace do Service Bus

  1. Abra o portal do Azure e navegue até o grupo de recursos az204-svcbus-rg .

  2. Selecione o recurso az204svcbus que você criou.

  3. Selecione Políticas de acesso compartilhado na seção Configurações e, em seguida, selecione a política RootManageSharedAccessKey.

  4. Copie a Cadeia de Conexão Primária da caixa de diálogo que a abre e salve-a em um arquivo, ou deixe o portal aberto e copie a chave quando necessário.

Criar aplicativo de console para enviar mensagens para a fila

  1. Abra um terminal local e crie e altere para um diretório chamado az204svcbus e, em seguida, execute o comando para iniciar o Visual Studio Code.

    code .
    
  2. Abra o terminal no Visual Studio Code selecionando Terminal New Terminal na barra de menus e execute os seguintes comandos para criar o aplicativo de console e adicionar o pacote Azure.Messaging.ServiceBus.>

    dotnet new console
    dotnet add package Azure.Messaging.ServiceBus
    
  3. Em Program.cs, adicione as seguintes using instruções na parte superior do arquivo após a instrução atual using .

    using Azure.Messaging.ServiceBus;
    
  4. Adicione as seguintes variáveis ao código e defina a connectionString variável para a cadeia de conexão que você obteve anteriormente.

    // connection string to your Service Bus namespace
    string connectionString = "<CONNECTION STRING>";
    
    // name of your Service Bus topic
    string queueName = "az204-queue";
    
  5. Adicione o seguinte código abaixo das variáveis que você acabou de adicionar. Consulte os comentários de código para obter detalhes.

    // 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;
    
    // Create the clients that we'll use for sending and processing messages.
    client = new ServiceBusClient(connectionString);
    sender = client.CreateSender(queueName);
    
    // create a batch 
    using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
    for (int i = 1; i <= 3; i++)
    {
        // try adding a message to the batch
        if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
        {
            // if an exception occurs
            throw new Exception($"Exception {i} has occurred.");
        }
    }
    
    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 three 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("Follow the directions in the exercise to review the results in the Azure portal.");
    Console.WriteLine("Press any key to continue");
    Console.ReadKey();
    
  6. Salve o arquivo e execute o dotnet build comando para garantir que não haja erros.

  7. Execute o programa usando o dotnet run comando e aguarde a seguinte mensagem de confirmação. Em seguida, pressione qualquer tecla para sair do programa.

    A batch of three messages has been published to the queue.
    

Rever resultados

  1. Entre no portal do Azure e navegue até o namespace do Service Bus.

  2. Selecione Filas na seção Entidades do painel de navegação e, em seguida, selecione a fila az204 na lista.

  3. Selecione o Service Bus Explorer no painel de navegação Fila do Service Bus.

  4. Selecione Espiar no início e as três mensagens enviadas serão exibidas.

    Decorativo.

Atualizar projeto para receber mensagens na fila

Nesta seção, você atualiza o programa para receber mensagens da fila.

  1. Adicione o seguinte código no final do código existente. Consulte os comentários de código para obter detalhes.

    ServiceBusProcessor processor;
    client = new ServiceBusClient(connectionString);
    
    // create a processor that we can use to process the messages
    processor = client.CreateProcessor(queueName, 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. messages 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;
    }
    
  2. Use o dotnet build comando para garantir que não haja erros.

  3. Use o dotnet run comando para executar o aplicativo. Ele envia mais três mensagens para a fila e, em seguida, recupera todas as seis mensagens. Pressione qualquer tecla para parar o recetor e o aplicativo.

    Wait for a minute and then press any key to end the processing
    Received: Message 1
    Received: Message 2
    Received: Message 3
    Received: Message 1
    Received: Message 2
    Received: Message 3
    
    Stopping the receiver...
    Stopped receiving messages
    

    Nota

    Como o aplicativo enviou dois lotes de mensagens antes de recuperá-las, você deve ver dois lotes de três mensagens representadas na saída.

  4. Volte ao portal e selecione Espreitar a partir do início novamente. Observe que nenhuma mensagem aparece na fila, pois recuperamos todas.

Clean up resources (Limpar recursos)

Quando os recursos não forem mais necessários, você poderá usar o az group delete comando no Azure Cloud Shell para remover o grupo de recursos.

az group delete --name az204-svcbus-rg --no-wait