Início Rápido: Enviar eventos para e receber eventos de Hubs de Eventos do Azure com o .NET

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

Nota

Os inícios rápidos permitem-lhe aumentar rapidamente o serviço. Se já estiver familiarizado com o serviço, poderá querer ver exemplos de .NET para Hubs de Eventos no nosso repositório do SDK .NET no GitHub: exemplos de Hubs de Eventos no GitHub, exemplos de processador de eventos no GitHub.

Pré-requisitos

Se não estiver familiarizado com Hubs de Eventos do Azure, consulte Descrição geral dos Hubs de Eventos antes de passar por este início rápido.

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

  • Subscrição do Microsoft Azure. Para utilizar os serviços do Azure, incluindo Hubs de Eventos do Azure, precisa de uma subscrição. Se não tiver uma conta do Azure existente, pode inscrever-se numa avaliação gratuita ou utilizar os benefícios de subscritor do MSDN quando criar uma conta.
  • Microsoft Visual Studio 2022. A biblioteca de cliente Hubs de Eventos do Azure utiliza as novas funcionalidades que foram introduzidas no C# 8.0. Ainda pode utilizar a biblioteca com versões de idioma C# anteriores, mas a nova sintaxe não está disponível. Para utilizar a sintaxe completa, recomendamos que compile com o SDK .NET Core 3.0 ou superior e a versão de idioma definida como latest. Se estiver a utilizar 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 Comunidade gratuita, pode ser transferido aqui.
  • Crie um espaço de nomes dos Hubs de Eventos e um hub de eventos. O primeiro passo é utilizar o portal do Azure para criar um espaço de nomes dos Hubs de Eventos e um hub de eventos no espaço de nomes. Em seguida, obtenha as credenciais de gestão de que a sua aplicação precisa para comunicar com o hub de eventos. Para criar um espaço de nomes e um hub de eventos, veja Início Rápido: Criar um hub de eventos com portal do Azure.

Autenticar a aplicação no Azure

Este guia de introdução mostra-lhe duas formas de ligar ao Hubs de Eventos do Azure:

  • Sem palavra-passe (autenticação do Azure Active Directory)
  • Cadeia de ligação

A primeira opção mostra-lhe como utilizar o principal de segurança no Azure Active Directory e o controlo de acesso baseado em funções (RBAC) para se ligar a um espaço de nomes dos Hubs de Eventos. Não precisa de se preocupar em ter cadeias de ligação codificadas no seu código ou num ficheiro de configuração ou num armazenamento seguro, como o Azure Key Vault.

A segunda opção mostra-lhe como utilizar uma cadeia de ligação para ligar a um espaço de nomes dos Hubs de Eventos. Se não estiver familiarizado com o Azure, poderá achar a opção de cadeia de ligação mais fácil de seguir. Recomendamos que utilize a opção sem palavra-passe em aplicações e ambientes de produção do mundo real. Para obter mais informações, veja Autenticação e autorização. Também pode ler mais sobre a autenticação sem palavra-passe na página de descrição geral.

Atribuir funções ao utilizador Azure AD

Ao desenvolver localmente, certifique-se de que a conta de utilizador que se liga ao Hubs de Eventos do Azure tem as permissões corretas. Precisará da função de Proprietário de Dados Hubs de Eventos do Azure para enviar e receber mensagens. Para atribuir esta função a si próprio, precisará da função Administrador de Acesso de Utilizador ou de outra função que inclua a ação Microsoft.Authorization/roleAssignments/write . Pode atribuir funções RBAC do Azure a um utilizador com o portal do Azure, a CLI do Azure ou Azure PowerShell. Saiba mais sobre os âmbitos disponíveis para atribuições de funções na página de descrição geral do âmbito .

O exemplo seguinte atribui a Azure Event Hubs Data Owner função à sua conta de utilizador, que fornece acesso total a recursos Hubs de Eventos do Azure. Num cenário real, siga o Princípio do Privilégio Mínimo para conceder aos utilizadores 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, a gestão de espaços de nomes e todos os recursos relacionados através do portal do Azure e da API de gestão de recursos do Azure já está protegida com o modelo RBAC do Azure. O Azure fornece as funções incorporadas do Azure abaixo para autorizar o acesso a um espaço de nomes dos Hubs de Eventos:

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

Importante

Na maioria dos casos, a atribuição de funções demorará um ou dois minutos a propagar no Azure. Em casos raros, pode demorar até oito minutos. Se 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 o espaço de nomes dos Hubs de Eventos com a barra de pesquisa principal ou a navegação esquerda.

  2. Na página descrição geral, selecione Controlo de acesso (IAM) no menu esquerdo.

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

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

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

  5. Utilize a caixa de pesquisa para filtrar os resultados para a função pretendida. Neste exemplo, procure Azure Event Hubs Data Owner e selecione o resultado correspondente. Em seguida, selecione Seguinte.

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

  7. Na caixa de diálogo, procure o seu nome de utilizador Azure AD (normalmente o seu user@domain endereço de e-mail) e, em seguida, selecione 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 iniciar sessão no Azure

Pode autorizar o acesso ao espaço de nomes do service bus com os seguintes passos:

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

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

    Captura de ecrã a mostrar um botão para iniciar sessão no Azure com o Visual Studio.

  3. Inicie sessão com a conta Azure AD à qual atribuiu uma função anteriormente.

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

Enviar eventos para o hub de eventos

Esta secção mostra-lhe como criar uma aplicação de consola .NET Core para enviar eventos para o hub de eventos que criou.

Criar uma aplicação de consola

  1. Se já tiver o Visual Studio 2022 aberto, selecione Ficheiro 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 de pop-up.

  2. Na caixa de diálogo Criar um novo projeto , siga os seguintes passos: 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 Consola para o tipo de aplicação.

    3. Selecione Aplicação de Consola na lista de resultados.

    4. Em seguida, selecione Seguinte.

      Imagem a mostrar a caixa de diálogo Novo Projeto

  3. Introduza EventHubsSender para o nome do projeto, EventHubsQuickStart para o nome da solução e, em seguida, selecione Seguinte.

    Imagem a mostrar a página onde introduz nomes de projetos e soluções

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

Adicionar os pacotes NuGet ao projeto

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

  2. Execute os seguintes comandos para instalar pacotes NuGet Azure.Messaging.EventHubs e Azure.Identity . Prima 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 ficheiro pelo seguinte código de exemplo. Em seguida, substitua <EVENT_HUB_NAMESPACE> e <HUB_NAME> os valores de marcador de posição dos EventHubProducerClient parâmetros pelos nomes do espaço de nomes dos Hubs de Eventos e do hub de eventos. Por exemplo: "spehubns0309.servicebus.windows.net" e "spehub".

    Eis os passos importantes do código:

    1. Cria um objeto EventHubProducerClient com o espaço de nomes 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 com o método EventDataBatch.TryAdd .
    4. Envia o lote de mensagens para o hub de eventos com 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 existem erros.

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

    A batch of 3 events has been published.
    
  3. Na página Espaço de Nomes dos Hubs de Eventos no portal do Azure, verá três mensagens recebidas no gráfico Mensagens. Atualize a página para atualizar o gráfico, se necessário. Pode demorar alguns segundos para que mostre que as mensagens foram recebidas.

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

    Nota

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

Receber eventos do hub de eventos

Esta secção mostra como escrever uma aplicação de consola .NET Core que recebe eventos de um hub de eventos com um processador de eventos. O processador de eventos simplifica a receção de eventos dos hubs de eventos.

Criar uma Conta de Armazenamento do Azure e um contentor de blobs

Neste início rápido, vai utilizar o Armazenamento do Azure como o arquivo de pontos de verificação. Siga estes passos para criar uma conta de Armazenamento do Azure.

  1. Criar uma conta de Armazenamento do Azure
  2. Criar um contentor de blobs
  3. Autentique-se no contentor de blobs com a autenticação Azure AD (sem palavra-passe) ou uma cadeia de ligação para o espaço de nomes.

Siga estas recomendações ao utilizar Armazenamento de Blobs do Azure como um arquivo de pontos de verificação:

  • Utilize um contentor separado para cada grupo de processadores. Pode utilizar a mesma conta de armazenamento, mas utilizar um contentor por cada grupo.
  • Não utilize o contentor para mais nada e não utilize a conta de armazenamento para mais nada.
  • A conta de armazenamento deve estar na mesma região em que a aplicação implementada está localizada. Se a aplicação estiver no local, tente escolher a região mais próxima possível.

Na página Conta de armazenamento no portal do Azure, na secção Serviço blob, certifique-se de que as seguintes definições estão desativadas.

  • Espaço de nomes hierárquico
  • Eliminação recuperável de blobs
  • Controlo de versões

Ao desenvolver localmente, certifique-se de que a conta de utilizador que está a aceder aos dados de blobs tem as permissões corretas. Precisará do Contribuidor de Dados de Blobs de Armazenamento para ler e escrever dados de blobs. Para lhe atribuir esta função, terá de lhe ser atribuída a função Administrador de Acesso de Utilizador ou outra função que inclua a ação Microsoft.Authorization/roleAssignments/write . Pode atribuir funções RBAC do Azure a um utilizador com o portal do Azure, a CLI do Azure ou Azure PowerShell. Pode saber mais sobre os âmbitos disponíveis para atribuições de funções na página de descrição geral do âmbito .

Neste cenário, irá atribuir permissões à sua conta de utilizador, no âmbito da conta de armazenamento, para seguir o Princípio do Menor Privilégio. Esta prática dá aos utilizadores apenas as permissões mínimas necessárias e cria ambientes de produção mais seguros.

O exemplo seguinte irá atribuir a função Contribuidor de Dados de Blobs de Armazenamento à sua conta de utilizador, que fornece acesso de leitura e escrita aos dados de blobs na sua conta de armazenamento.

Importante

Na maioria dos casos, a atribuição de funções demorará um ou dois minutos a propagar-se no Azure, mas em casos raros poderá demorar até oito minutos. Se 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 a sua conta de armazenamento com a barra de pesquisa principal ou a navegação esquerda.

  2. Na página descrição geral da conta de armazenamento, selecione Controlo de acesso (IAM) no menu esquerdo.

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

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

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

  5. Utilize a caixa de pesquisa para filtrar os resultados para a função pretendida. Neste exemplo, procure Contribuidor de Dados de Blobs de Armazenamento , selecione o resultado correspondente e, em seguida, selecione Seguinte.

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

  7. Na caixa de diálogo, procure o seu nome de utilizador Azure AD (normalmente o seu user@domain endereço de e-mail) e, em seguida, selecione 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 Explorador de Soluções, clique com o botão direito do rato na solução EventHubQuickStart , aponte para Adicionar e selecione Novo Projeto.
  2. Selecione Aplicação de consola e selecione Seguinte.
  3. Introduza EventHubsReceiver para o Nome do projeto e selecione Criar.
  4. Na janela Explorador de Soluções , clique com o botão direito do rato em EventHubsReceiver e selecione Definir como um Projeto de Arranque.

Adicionar os pacotes NuGet ao projeto

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

  2. Na janela Consola do Gestor de Pacotes , confirme que EventHubsReceiver está selecionado para o projeto Predefinido. Caso contrário, utilize a lista pendente para selecionar EventHubsReceiver.

  3. Execute o seguinte comando para instalar os pacotes NuGet Azure.Messaging.EventHubs e Azure.Identity . Prima 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 ficheiro pelo seguinte código de exemplo. Em seguida, substitua os <STORAGE_ACCOUNT_NAME> valores de marcador de posição e <BLOB_CONTAINER_NAME> para o BlobContainerClient URI. Substitua também os <EVENT_HUB_NAMESPACE> valores de marcador de posição e<HUB_NAME>.EventProcessorClient

    Eis os passos importantes do código:

    1. Cria um objeto EventProcessorClient com o espaço de nomes dos Hubs de Eventos e o nome do hub de eventos. Tem de criar um objeto BlobContainerClient para o contentor no armazenamento do Azure que criou anteriormente.
    2. Especifica processadores para os eventos ProcessEventAsync e ProcessErrorAsync do objeto EventProcessorClient .
    3. Inicia o processamento de eventos ao invocar o StartProcessingAsync no objeto EventProcessorClient .
    4. Para o processamento de eventos após 30 segundos ao invocar 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_CONTATINAER_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 existem erros.

    Nota

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

  2. Execute a aplicação recetora.

  3. Deverá ver uma mensagem a indicar que os eventos foram recebidos.

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

    Estes eventos são os três eventos que enviou anteriormente para o hub de eventos ao executar o programa de remetente.

  4. No portal do Azure, pode verificar se existem três mensagens a enviar, que Hubs de Eventos enviaram para a aplicação de receção. Atualize a página para atualizar o gráfico. Pode demorar alguns segundos para que mostre que as mensagens foram recebidas.

    Imagem da página portal do Azure para verificar se o hub de eventos enviou eventos para a aplicação de receção

Validação do esquema para aplicações baseadas no SDK dos Hubs de Eventos

Pode utilizar o Azure Schema Registry para efetuar a validação do esquema ao transmitir dados em fluxo com as suas aplicações baseadas em SDK dos Hubs de Eventos. O Registo de Esquemas do Azure dos Hubs de Eventos fornece um repositório centralizado para gerir esquemas e pode ligar facilmente as suas aplicações novas ou existentes ao Registo de Esquemas.

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

Limpar os recursos

Elimine o grupo de recursos que tem o espaço de nomes dos Hubs de Eventos ou elimine apenas o espaço de nomes se quiser manter o grupo de recursos.

Exemplos e referência

Este guia de introdução 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 as seguintes ligações.

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

Passos seguintes

Veja o seguinte tutorial: