Guia de início rápido: enviar e receber eventos dos Hubs de Eventos do Azure usando .NET

Hubs de Eventos do Azure é uma plataforma de streaming de dados em tempo real que pode receber e processar milhões de eventos por segundo. Se está a construir aplicações .NET que precisam de ingerir ou reagir a fluxos de eventos de grande volume, os Event Hubs fornecem a infraestrutura escalável para o fazer.

Neste quickstart, cria uma aplicação de consola .NET que envia eventos para um hub de eventos e os recebe usando a biblioteca Azure.Messaging.EventHubs. No final, terá código funcional que pode adaptar para os seus próprios cenários orientados por eventos.

Pré-requisitos

Se é novo no Hubs de Eventos do Azure, consulte Visão geral do Event Hubs antes de completar este guia rápido.

Nota

Se já está familiarizado com o serviço, pode ver exemplos em .NET para Event Hubs no nosso repositório .NET SDK no GitHub: exemplos de Event Hubs no GitHub, exemplos de processadores de eventos no GitHub.

Para concluir este arranque rápido, necessita de:

  • Subscrição do Microsoft Azure. Para usar os serviços do Azure, incluindo Hubs de Eventos, você precisa de uma assinatura. Se não tiver uma conta existente do Azure, pode inscrever-se para uma avaliação gratuita.
  • Microsoft Visual Studio 2022. A biblioteca cliente Hubs de Eventos do Azure utiliza novas funcionalidades introduzidas em C# 8.0. Você ainda pode usar a biblioteca com versões anteriores do idioma C#, mas a nova sintaxe não está disponível. Para usar a sintaxe completa, recomendamos que compile com o Core SDK .NET 3.0 ou superior e a versão language definida para latest. Se você estiver usando o Visual Studio, as versões anteriores ao Visual Studio 2022 não são compatíveis com as ferramentas necessárias para criar projetos C# 8.0. O Visual Studio 2022, incluindo a edição gratuita da Comunidade, pode ser baixado aqui.
  • Crie um namespace de Hubs de Eventos e um hub de eventos. Use o portal Azure para criar um namespace Event Hubs e um event hub nesse namespace. Depois, obtenha as credenciais de gestão que a sua aplicação precisa para comunicar com o hub de eventos. Para criar um namespace e um hub de eventos, consulte Guia de início rápido: criar um hub de eventos usando o portal do Azure.

Autenticar o aplicativo no Azure

Este início rápido mostra duas maneiras de se conectar aos Hubs de Eventos do Azure:

  • Sem senha (autenticação Microsoft Entra)
  • Cadeia de conexão

A primeira opção mostra como usar a sua principal de segurança no Azure Microsoft Entra ID e RBAC (controle de acesso baseado em função) para se conectar a um espaço de nomes do Event Hubs. Você não precisa se preocupar em ter cadeias de conexão codificadas em seu código ou 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 de Hubs de Eventos. Se você for novo no Azure, poderá achar a opção de cadeia de conexão mais fácil de seguir. Recomendamos o uso da opção sem senha em aplicativos e ambientes de produção do mundo real. Para obter mais informações, consulte Autenticação e autorização. Você também pode ler mais sobre autenticação sem senha na página de visão geral.

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

Ao desenvolver localmente, verifique se a conta de usuário que se conecta aos Hubs de Eventos do Azure tem as permissões corretas. Você precisa da função Proprietário de Dados dos Hubs de Eventos do Azure para enviar e receber mensagens. Para atribuir essa função a si mesmo, você precisa da função de Administrador de Acesso de Usuário ou outra função que inclua a Microsoft.Authorization/roleAssignments/write ação. Você pode atribuir funções do RBAC do Azure a um usuário usando o portal do Azure, a CLI do Azure ou o Azure PowerShell. Para obter mais informações, consulte Entender o escopo da página RBAC do Azure .

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

Funções incorporadas do Azure para Hubs de Eventos do Azure

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

Se quiser criar uma função personalizada, consulte Direitos necessários para operações de Hubs de Eventos.

Importante

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

  1. No portal do Azure, localize seu namespace de Hubs de Eventos 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 Controlo de acessos (IAM), selecione o separador Atribuições de funções.

  4. Selecione + Adicionar no menu superior. Em seguida, selecione Adicionar atribuição de função.

    Captura de ecrã a mostrar como atribuir uma função.

  5. Use a caixa de pesquisa para filtrar os resultados para a função desejada. Para este exemplo, procure Hubs de Eventos do Azure 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. Em seguida, escolha + Selecionar membros.

  7. Na caixa de diálogo, procure o seu nome de utilizador do Microsoft Entra (normalmente o seu endereço de e-mail user@domain ). Escolha Selecionar na parte inferior da caixa de diálogo.

  8. Selecione Rever + atribuir para ir para a página final. Selecione Rever + 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 ecrã a mostrar um botão para iniciar sessão no Azure utilizando o Visual Studio.

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

    Captura de ecrã a mostrar a seleção da conta.

Enviar eventos para o hub de eventos

Esta seção mostra como criar um aplicativo de console .NET Core para enviar eventos para o hub de eventos que você criou.

Criar uma aplicação de consola

  1. Se Visual Studio 2022 já estiver aberto, selecione Ficheiro no menu, selecione Novo e depois selecione Project. Caso contrário, inicie o Visual Studio 2022 e selecione Criar um novo projeto se vir uma janela pop-up.

  2. Na caixa de diálogo Criar uma nova project, complete os seguintes passos: Se não vir esta caixa de diálogo, selecione File no menu, selecione Novo e depois selecione Project.

    1. Selecione C# para a linguagem de programação.

    2. Selecione Console para o tipo do aplicativo.

    3. Selecione Aplicativo de console na lista de resultados.

    4. Selecione Avançar.

      Imagem mostrando a caixa de diálogo Novo Projeto

  3. Insira EventHubsSender para o nome do projeto, EventHubsQuickStart para o nome da solução e selecione Avançar.

    Imagem mostrando a página onde você insere nomes de solução e projeto

  4. Na página Informações adicionais, selecione Criar.

Adicionar os pacotes NuGet ao projeto

  1. Selecione Ferramentas>Gestor de Pacotes NuGet>Consola do Gestor de Pacotes no menu.

  2. Execute os seguintes comandos para instalar os pacotes NuGet Azure.Messaging.EventHubs e Azure.Identity. Pressione ENTER para executar o segundo comando.

    Install-Package Azure.Messaging.EventHubs
    Install-Package Azure.Identity
    

Escrever código para enviar eventos para o hub de eventos

  1. Substitua o código existente no Program.cs arquivo pelo código de exemplo a seguir. Em seguida, substitua os valores dos espaços reservados <EVENT_HUB_NAMESPACE> e <HUB_NAME> dos EventHubProducerClient parâmetros pelos nomes do namespace do Hub de Eventos e do hub de eventos. Por exemplo: "spehubns0309.servicebus.windows.net" e "spehub".

    Aqui estão as etapas importantes do código:

    1. Cria um objeto EventHubProducerClient usando o namespace e o nome do hub de eventos.
    2. Invoca o método CreateBatchAsync no objeto EventHubProducerClient para criar um objeto EventDataBatch .
    3. Adiciona eventos ao lote usando o método EventDataBatch.TryAdd .
    4. Envia o lote de eventos para o event hub usando o método EventHubProducerClient.SendAsync .
    using Azure.Identity;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Producer;
    using System.Text;
    
    // number of events to be sent to the event hub
    int numOfEvents = 3;
    
    // The Event Hubs client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when events are being published or read regularly.
    // TODO: Replace the <EVENT_HUB_NAMESPACE> and <HUB_NAME> placeholder values
    EventHubProducerClient producerClient = new EventHubProducerClient(
        "<EVENT_HUB_NAMESPACE>.servicebus.windows.net",
        "<HUB_NAME>",
        new DefaultAzureCredential());
    
    // Create a batch of events 
    using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
    
    for (int i = 1; i <= numOfEvents; i++)
    {
        if (!eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes($"Event {i}"))))
        {
            // if it is too large for the batch
            throw new Exception($"Event {i} is too large for the batch and cannot be sent.");
        }
    }
    
    try
    {
        // Use the producer client to send the batch of events to the event hub
        await producerClient.SendAsync(eventBatch);
        Console.WriteLine($"A batch of {numOfEvents} events has been published.");
        Console.ReadLine();
    }
    finally
    {
        await producerClient.DisposeAsync();
    }
    
  1. Crie o projeto e certifique-se de que não há erros.

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

    A batch of 3 events has been published.
    

    Nota

    Se você receber um erro "InvalidIssuer: Token issuer is invalid" ao usar a autenticação do Microsoft Entra, pode ser porque a ID de locatário do Microsoft Entra errada está sendo usada. No seu código, substitua 'new DefaultAzureCredential()' por 'new DefaultAzureCredential(new DefaultAzureCredentialOptions {TenantId = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx"})' para especificar explicitamente o ID do Locatário do Microsoft Entra.

    Importante

    Se estiver a usar a autenticação Passwordless (controlo de acesso baseado em funções do Microsoft Entra), selecione Tools, depois selecione Options. Na janela Opções, expanda Autenticação de Serviço do Azure e selecione Seleção de Conta. Confirme se você está usando a conta que foi adicionada à função Proprietário de Dados dos Hubs de Eventos do Azure no namespace Hubs de Eventos.

  3. Na página de namespace Hubs de Eventos no portal do Azure, você verá três mensagens de entrada no gráfico Mensagens . Atualize a página para refrescar o gráfico, se necessário. Pode levar alguns segundos para mostrar que as mensagens foram recebidas.

    Imagem da página do portal do Azure para verificar se o hub de eventos recebeu os eventos

    Nota

    Para o código-fonte completo com comentários mais informativos, veja este ficheiro em GitHub

Receber eventos do hub de eventos

Esta seção mostra como escrever um aplicativo de console .NET Core que recebe eventos de um hub de eventos usando um processador de eventos. O processador de eventos simplifica o recebimento de eventos de hubs de eventos.

Crie uma conta Armazenamento do Azure e um contentor de blob

Neste início rápido, você usa o Armazenamento do Azure como o armazenamento de ponto de verificação. Utilize os seguintes passos para criar uma conta no Armazenamento do Azure:

  1. Criar uma conta de Armazenamento do Azure
  2. Criar um contêiner de blob
  3. Autentique-se no contentor de blobs usando autenticação sem palavra-passe do ID de Microsoft Entra ou uma cadeia de conexão com o namespace.

Siga estas recomendações ao usar o Armazenamento de Blobs do Azure como um armazenamento de ponto de verificação:

  • Use um contêiner separado para cada grupo de consumidores. Você pode usar a mesma conta de armazenamento, mas usar um contêiner por cada grupo.
  • Não use a conta de armazenamento para mais nada.
  • Não use o recipiente para mais nada.
  • Crie a conta de armazenamento na mesma região do aplicativo implantado. Se a aplicação for local, tente escolher a região mais próxima possível.

Na página Conta de armazenamento no portal do Azure, na seção Serviço de Blob, verifique se as configurações a seguir estão desabilitadas.

  • Espaço de nomes hierárquico
  • Eliminação de forma recuperável de blobs
  • Versionamento

Ao desenvolver localmente, certifique-se de que a conta de usuário que acessa os dados de blob tenha as permissões corretas. Você precisa do Storage Blob Data Contributor para ler e gravar dados de blob. Para atribuir essa função a si mesmo, você precisa receber a função de Administrador de Acesso de Usuário ou outra função que inclua a ação Microsoft.Authorization/roleAssignments/write . Você pode atribuir funções do RBAC do Azure a um usuário usando o portal do Azure, a CLI do Azure ou o Azure PowerShell. Para obter mais informações, consulte Entender o escopo do Azure RBAC.

Nesse cenário, você atribui permissões à sua conta de usuário, com escopo para a conta de armazenamento, para seguir o Princípio do Menor Privilégio. Essa prática oferece aos usuários apenas as permissões mínimas necessárias e cria ambientes de produção mais seguros.

O exemplo a seguir atribui a função de Colaborador de Dados de Blob de Armazenamento à sua conta de usuário, que fornece acesso de leitura e gravação aos dados de blob em sua conta de armazenamento.

Importante

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

  1. No portal do Azure, localize sua conta de armazenamento usando a barra de pesquisa principal ou a navegação à esquerda.

  2. Na página da conta de armazenamento, selecione Controle de acesso (IAM) no menu à esquerda.

  3. Na página Controlo de acessos (IAM), selecione o separador Atribuições de funções.

  4. Selecione + Adicionar no menu superior. Em seguida, selecione Adicionar atribuição de função.

    Captura de ecrã a mostrar como atribuir uma função de conta de armazenamento.

  5. Use a caixa de pesquisa para filtrar os resultados para a função desejada. Para este exemplo, procure por Storage Blob Data Contributor. Selecione o resultado correspondente e, em seguida, escolha Avançar.

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

  7. Na caixa de diálogo, procure seu nome de usuário do Microsoft Entra (geralmente seu endereço de e-mail user@domain ) e escolha Selecionar na parte inferior da caixa de diálogo.

  8. Selecione Rever + atribuir para ir para a página final. Selecione Rever + atribuir novamente para concluir o processo.

Criar um projeto para o recetor

  1. Na janela Gerenciador de Soluções, clique com o botão direito do mouse na solução EventHubQuickStart, aponte para Adicionar e selecione Novo Projeto.
  2. Selecione Aplicativo de console e selecione Avançar.
  3. Digite EventHubsReceiver para o nome do projeto e selecione Criar.
  4. Na janela Gerenciador de Soluções, clique com o botão direito do mouse em EventHubsReceiver e selecione Definir como um Projeto de Inicialização.

Adicionar os pacotes NuGet ao projeto

  1. Selecione Ferramentas>Gestor de Pacotes NuGet>Consola do Gestor de Pacotes no menu.

  2. Na janela Console do Gerenciador de Pacotes, confirme se EventHubsReceiver está selecionado para o projeto Padrão. Caso contrário, use a lista suspensa para selecionar EventHubsReceiver.

  3. Execute o seguinte comando para instalar os pacotes NuGet Azure.Messaging.EventHubs e Azure.Identity. Pressione ENTER para executar o último comando.

    Install-Package Azure.Messaging.EventHubs
    Install-Package Azure.Messaging.EventHubs.Processor
    Install-Package Azure.Identity
    

Atualizar o código

Substitua o conteúdo do ficheiro Program.cs pelo seguinte código:

  1. Substitua o código existente no Program.cs arquivo pelo código de exemplo a seguir. Em seguida, substitua os valores de espaço reservado <STORAGE_ACCOUNT_NAME> e <BLOB_CONTAINER_NAME> por BlobContainerClient URI. Substitua os valores dos placeholders <EVENT_HUB_NAMESPACE> e <HUB_NAME> para o EventProcessorClient também.

    Aqui estão as etapas importantes do código:

    1. Cria um objeto EventProcessorClient usando o namespace Hubs de Eventos e o nome do hub de eventos. Você precisa criar o objeto BlobContainerClient para o contêiner no armazenamento do Azure criado anteriormente.
    2. Especifica manipuladores para os eventos ProcessEventAsync e ProcessErrorAsync do objeto EventProcessorClient .
    3. Inicia o processamento de eventos invocando o StartProcessingAsync no objeto EventProcessorClient .
    4. Interrompe o processamento de eventos após 30 segundos invocando StopProcessingAsync no objeto EventProcessorClient.
    using Azure.Identity;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Consumer;
    using Azure.Messaging.EventHubs.Processor;
    using Azure.Storage.Blobs;
    using System.Text;
    
    // Create a blob container client that the event processor will use
    // TODO: Replace <STORAGE_ACCOUNT_NAME> and <BLOB_CONTAINER_NAME> with actual names
    BlobContainerClient storageClient = new BlobContainerClient(
        new Uri("https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/<BLOB_CONTAINER_NAME>"),
        new DefaultAzureCredential());
    
    // Create an event processor client to process events in the event hub
    // TODO: Replace the <EVENT_HUBS_NAMESPACE> and <HUB_NAME> placeholder values
    var processor = new EventProcessorClient(
        storageClient,
        EventHubConsumerClient.DefaultConsumerGroupName,
        "<EVENT_HUB_NAMESPACE>.servicebus.windows.net",
        "<HUB_NAME>",
        new DefaultAzureCredential());
    
    // Register handlers for processing events and handling errors
    processor.ProcessEventAsync += ProcessEventHandler;
    processor.ProcessErrorAsync += ProcessErrorHandler;
    
    // Start the processing
    await processor.StartProcessingAsync();
    
    // Wait for 30 seconds for the events to be processed
    await Task.Delay(TimeSpan.FromSeconds(30));
    
    // Stop the processing
    await processor.StopProcessingAsync();
    
    Task ProcessEventHandler(ProcessEventArgs eventArgs)
    {
        // Write the body of the event to the console window
        Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray()));
        Console.ReadLine();
        return Task.CompletedTask;
    }
    
    Task ProcessErrorHandler(ProcessErrorEventArgs eventArgs)
    {
        // Write details about the error to the console window
        Console.WriteLine($"\tPartition '{eventArgs.PartitionId}': an unhandled exception was encountered. This was not expected to happen.");
        Console.WriteLine(eventArgs.Exception.Message);
        Console.ReadLine();
        return Task.CompletedTask;
    }
    
  1. Crie o projeto e certifique-se de que não há erros.

    Nota

    Para o código-fonte completo com comentários mais informativos, veja este ficheiro em GitHub.

  2. Execute o aplicativo recetor.

  3. Vês uma mensagem a dizer que os eventos foram recebidos. Pressione ENTER depois de ver uma mensagem de evento recebida.

    Received event: Event 1
    Received event: Event 2
    Received event: Event 3    
    

    Esses eventos são os três eventos que você enviou para o hub de eventos anteriormente executando o programa remetente.

  4. No portal do Azure, pode verificar se há três mensagens enviadas, que os Hubs de Eventos enviaram para a aplicação recetora. Recarregue a página para atualizar o gráfico. Pode levar alguns segundos para mostrar que as mensagens foram recebidas.

    Imagem da página do portal do Azure para verificar se o hub de eventos enviou eventos para o aplicativo de recebimento

Validação de esquemas para aplicações baseadas em SDK em Event Hubs

Você pode usar o Registro de Esquema do Azure para executar a validação de esquema ao transmitir dados com seus aplicativos baseados em SDK de Hubs de Eventos. O Azure Schema Registry of Event Hubs fornece um repositório centralizado para gerir esquemas, e pode ligar facilmente as suas aplicações novas ou existentes ao Schema Registry.

Para saber mais, consulte Validar esquemas com o SDK de Hubs de Eventos.

Amostras e referência

Este quickstart fornece instruções passo a passo para implementar um cenário de enviar um lote de eventos para um hub de eventos e depois recebê-los. Para obter mais exemplos, selecione os links a seguir.

Para obter referência completa da biblioteca .NET, consulte nossa documentação do SDK.

Limpar recursos

Exclua o grupo de recursos que tem o namespace Hubs de Eventos ou exclua apenas o namespace se quiser manter o grupo de recursos.

Veja o seguinte tutorial: