Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- Proprietário de Dados dos Hubs de Eventos do Azure: habilita o acesso aos dados ao namespace dos Hubs de Eventos e suas entidades (filas, tópicos, assinaturas e filtros).
- Remetente de Dados dos Hubs de Eventos do Azure: use essa função para dar ao remetente acesso ao namespace dos Hubs de Eventos e suas entidades.
- Recetor de Dados dos Hubs de Eventos do Azure: use essa função para dar ao recetor acesso ao namespace dos Hubs de Eventos e suas entidades.
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.
No portal do Azure, localize seu namespace de Hubs de Eventos usando a barra de pesquisa principal ou a navegação à esquerda.
Na página de visão geral, selecione Controle de acesso (IAM) no menu à esquerda.
Na página Controlo de acessos (IAM), selecione o separador Atribuições de funções.
Selecione + Adicionar no menu superior. Em seguida, selecione Adicionar atribuição de função.
Use a caixa de pesquisa para filtrar os resultados para a função desejada. Para este exemplo, procure
Hubs de Eventos do Azure Data Ownere selecione o resultado correspondente. Em seguida, escolha Avançar.Em Atribuir acesso a, selecione Usuário, grupo ou entidade de serviço. Em seguida, escolha + Selecionar membros.
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.
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:
Inicie o Visual Studio. Se você vir a janela Introdução , selecione o link Continuar sem código no painel direito.
Selecione o botão Entrar no canto superior direito do Visual Studio.
Entre usando a conta do Microsoft Entra à qual você atribuiu uma função anteriormente.
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
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.
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.
Selecione C# para a linguagem de programação.
Selecione Console para o tipo do aplicativo.
Selecione Aplicativo de console na lista de resultados.
Selecione Avançar.
Insira EventHubsSender para o nome do projeto, EventHubsQuickStart para o nome da solução e selecione Avançar.
Na página Informações adicionais, selecione Criar.
Adicionar os pacotes NuGet ao projeto
Selecione Ferramentas>Gestor de Pacotes NuGet>Consola do Gestor de Pacotes no menu.
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
Substitua o código existente no
Program.csarquivo pelo código de exemplo a seguir. Em seguida, substitua os valores dos espaços reservados<EVENT_HUB_NAMESPACE>e<HUB_NAME>dosEventHubProducerClientparâ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:
- Cria um objeto EventHubProducerClient usando o namespace e o nome do hub de eventos.
- Invoca o método CreateBatchAsync no objeto EventHubProducerClient para criar um objeto EventDataBatch .
- Adiciona eventos ao lote usando o método EventDataBatch.TryAdd .
- 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(); }
Crie o projeto e certifique-se de que não há erros.
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.
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.
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:
- Criar uma conta de Armazenamento do Azure
- Criar um contêiner de blob
- 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.
No portal do Azure, localize sua conta de armazenamento usando a barra de pesquisa principal ou a navegação à esquerda.
Na página da conta de armazenamento, selecione Controle de acesso (IAM) no menu à esquerda.
Na página Controlo de acessos (IAM), selecione o separador Atribuições de funções.
Selecione + Adicionar no menu superior. Em seguida, selecione Adicionar atribuição de função.
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.
Em Atribuir acesso a, selecione Utilizador, grupo ou entidade de serviço e, em seguida, selecione + Selecionar membros.
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.
Selecione Rever + atribuir para ir para a página final. Selecione Rever + atribuir novamente para concluir o processo.
Criar um projeto para o recetor
- 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.
- Selecione Aplicativo de console e selecione Avançar.
- Digite EventHubsReceiver para o nome do projeto e selecione Criar.
- 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
Selecione Ferramentas>Gestor de Pacotes NuGet>Consola do Gestor de Pacotes no menu.
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.
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:
Substitua o código existente no
Program.csarquivo pelo código de exemplo a seguir. Em seguida, substitua os valores de espaço reservado<STORAGE_ACCOUNT_NAME>e<BLOB_CONTAINER_NAME>porBlobContainerClientURI. Substitua os valores dos placeholders<EVENT_HUB_NAMESPACE>e<HUB_NAME>para oEventProcessorClienttambém.Aqui estão as etapas importantes do código:
- 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.
- Especifica manipuladores para os eventos ProcessEventAsync e ProcessErrorAsync do objeto EventProcessorClient .
- Inicia o processamento de eventos invocando o StartProcessingAsync no objeto EventProcessorClient .
- 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; }
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.
Execute o aplicativo recetor.
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 3Esses eventos são os três eventos que você enviou para o hub de eventos anteriormente executando o programa remetente.
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.
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.
- Exemplos de Hubs de Eventos no GitHub
- Exemplos de processador de eventos no GitHub
- Exemplo de controle de acesso baseado em função do Azure (Azure RBAC)
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.
Conteúdos relacionados
Veja o seguinte tutorial: