Partilhar via


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

Neste início rápido, você aprenderá como enviar eventos para um hub de eventos e, em seguida, receber esses eventos do hub de eventos usando a biblioteca .NET Azure.Messaging.EventHubs .

Nota

Os inícios rápidos são para você aumentar rapidamente o serviço. Se você já estiver familiarizado com o serviço, talvez queira ver exemplos do .NET para Hubs de Eventos em nosso repositório SDK do .NET no GitHub: exemplos de Hubs de Eventos no GitHub, exemplos de processador de eventos no GitHub.

Pré-requisitos

Se você é novo nos Hubs de Eventos do Azure, consulte Visão geral dos Hubs de Eventos antes de passar por este início rápido.

Para concluir este início rápido, você precisa dos seguintes pré-requisitos:

  • Subscrição do Microsoft Azure. Para usar os serviços do Azure, incluindo os Hubs de Eventos do Azure, você precisa de uma assinatura. Se você não tiver uma conta existente do Azure, poderá se inscrever para uma avaliação gratuita ou usar seus benefícios de assinante do MSDN ao criar uma conta.
  • Microsoft Visual Studio 2022. A biblioteca de cliente dos Hubs de Eventos do Azure usa novos recursos que foram introduzidos no 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 você compile com o .NET Core SDK 3.0 ou superior e a versão de idioma definida como 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. A primeira etapa é usar o portal do Azure para criar um namespace de Hubs de Eventos e um hub de eventos no namespace. Em seguida, obtenha as credenciais de gerenciamento de que seu aplicativo precisa para se 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)
  • Connection string

A primeira opção mostra como usar sua entidade de segurança no Azure Ative Directory e RBAC (controle de acesso baseado em função) para se conectar a um namespace de Hubs de Eventos. 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ê precisará 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ê precisará da função de Administrador de Acesso de Usuário ou de 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. 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 Azure Event Hubs 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 internas 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 do Azure 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, levará 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 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.

    Uma captura de tela mostrando como atribuir uma função.

  5. Use a caixa de pesquisa para filtrar os resultados para a função desejada. Para este exemplo, procure Azure Event Hubs Data Owner e selecione o resultado correspondente. 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 e, em seguida , 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 você já tiver o Visual Studio 2022 aberto, selecione Arquivo no menu, selecione Novo e, em seguida, selecione Projeto. 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 um novo projeto, execute as seguintes etapas: Se não vir esta caixa de diálogo, selecione Ficheiro no menu, selecione Novo e, em seguida, selecione Projeto.

    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. Em seguida, selecione Seguinte.

      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>NuGet Package Manager Package Manager>Console no menu.

  2. Execute os comandos a seguir para instalar os pacotes Azure.Messaging.EventHubs e Azure.Identity NuGet. 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 <EVENT_HUB_NAMESPACE> os valores de espaço <HUB_NAME> reservado para os EventHubProducerClient parâmetros pelos nomes do namespace dos Hubs 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. Adicione eventos ao lote usando o método EventDataBatch.TryAdd .
    4. Envia o lote de mensagens para o hub de eventos 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 o ID de locatário do Entra errado está sendo usado. No seu código, substitua 'new DefaultAzureCredential()' por 'new DefaultAzureCredential(new DefaultAzureCredentialOptions {TenantId = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx"})' para especificar explicitamente Entra Tenant Id.

    Importante

    Se estiver a utilizar a autenticação sem palavra-passe (Controlo de Acesso baseado em funções do Azure Ative Directory), selecione Ferramentas e, em seguida, selecione Opções. 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 Namespace de Hubs de Eventos no portal do Azure, você verá três mensagens de entrada no gráfico Mensagens . Atualize a página para atualizar 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 obter o código-fonte completo com mais comentários informativos, consulte este arquivo no 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.

Criar uma Conta de Armazenamento do Azure e um contêiner de blob

Neste início rápido, você usa o Armazenamento do Azure como o armazenamento de ponto de verificação. Siga estas etapas para criar uma conta de Armazenamento do Azure.

  1. Criar uma conta de Armazenamento do Azure
  2. Criar um contêiner de blob
  3. Autentique-se no contêiner de blob usando a autenticação Microsoft Entra ID (sem senha) ou uma cadeia de conexão para 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 o contêiner para mais nada e não use a conta de armazenamento para mais nada.
  • A conta de armazenamento deve estar na mesma região em que o aplicativo implantado está localizado. Se o aplicativo 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
  • Controlo de Versão

Ao desenvolver localmente, certifique-se de que a conta de usuário que está acessando dados de blob tem as permissões corretas. Você precisará do Storage Blob Data Contributor para ler e gravar dados de blob. Para atribuir essa função a si mesmo, você precisará 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. Você pode saber mais sobre os escopos disponíveis para atribuições de função na página de visão geral do escopo.

Nesse cenário, você atribuirá 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 atribuirá 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, levará um ou dois minutos para que a atribuição de função se propague no Azure, mas, em casos raros, pode levar 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 de visão geral da conta de armazenamento, 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.

    Uma captura de tela mostrando 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 e selecione o resultado correspondente e, em seguida, escolha Next.

  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 e, em seguida , 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>NuGet Package Manager Package Manager>Console 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 Azure.Messaging.EventHubs e Azure.Identity NuGet. 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> para o BlobContainerClient URI. Substitua os valores e <HUB_NAME> de <EVENT_HUB_NAMESPACE> espaço reservado 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 obter o código-fonte completo com mais comentários informativos, consulte este arquivo no GitHub.

  2. Execute o aplicativo recetor.

  3. Você verá uma mensagem informando 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, você pode verificar se há três mensagens de saída, que os Hubs de Eventos enviaram para o aplicativo de recebimento. Atualize 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 esquema para aplicativos baseados no SDK de Hubs de Eventos

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 Registro de Esquema do Azure de Hubs de Eventos fornece um repositório centralizado para gerenciar esquemas e você pode conectar perfeitamente seus aplicativos novos ou existentes com o Registro de Esquema.

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

Amostras e referência

Este início rápido fornece instruções passo a passo para implementar um cenário de envio de um lote de eventos para um hub de eventos e, em seguida, 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.

Clean up resources (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: