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:
- Hubs de Eventos do Azure Proprietário de Dados: permite o acesso de dados ao espaço de nomes dos Hubs de Eventos e às respetivas entidades (filas, tópicos, subscrições e filtros)
- Hubs de Eventos do Azure Remetente de Dados: utilize esta função para conceder ao remetente acesso ao espaço de nomes dos Hubs de Eventos e às respetivas entidades.
- Hubs de Eventos do Azure Recetor de Dados: utilize esta função para conceder ao recetor acesso ao espaço de nomes dos Hubs de Eventos e às respetivas entidades.
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.
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.
Na página descrição geral, selecione Controlo de acesso (IAM) no menu esquerdo.
Na página Controlo de acesso (IAM), selecione o separador Atribuições de funções .
Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu pendente resultante.
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.Em Atribuir acesso a, selecione Utilizador, grupo ou principal de serviço e, em seguida, selecione + Selecionar membros.
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.
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:
Inicie o Visual Studio. Se vir a janela Introdução , selecione a ligação Continuar sem código no painel direito.
Selecione o botão Iniciar sessão no canto superior direito do Visual Studio.
Inicie sessão com a conta Azure AD à qual atribuiu uma função anteriormente.
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
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.
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.
Selecione C# para a linguagem de programação.
Selecione Consola para o tipo de aplicação.
Selecione Aplicação de Consola na lista de resultados.
Em seguida, selecione Seguinte.
Introduza EventHubsSender para o nome do projeto, EventHubsQuickStart para o nome da solução e, em seguida, selecione Seguinte.
Na página Informações adicionais , selecione Criar.
Adicionar os pacotes NuGet ao projeto
Selecione Ferramentas>NuGet Gestor de>Pacotes Consola do Gestor de Pacotes no menu.
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
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 dosEventHubProducerClient
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:
- Cria um objeto EventHubProducerClient com o espaço de nomes e o nome do hub de eventos.
- Invoca o método CreateBatchAsync no objeto EventHubProducerClient para criar um objeto EventDataBatch .
- Adicione eventos ao lote com o método EventDataBatch.TryAdd .
- 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(); }
Crie o projeto e certifique-se de que não existem erros.
Execute o programa e aguarde pela mensagem de confirmação.
A batch of 3 events has been published.
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.
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.
- Criar uma conta de Armazenamento do Azure
- Criar um contentor de blobs
- 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.
No portal do Azure, localize a sua conta de armazenamento com a barra de pesquisa principal ou a navegação esquerda.
Na página descrição geral da conta de armazenamento, selecione Controlo de acesso (IAM) no menu esquerdo.
Na página Controlo de acesso (IAM), selecione o separador Atribuições de funções .
Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu pendente resultante.
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.
Em Atribuir acesso a, selecione Utilizador, grupo ou principal de serviço e, em seguida, selecione + Selecionar membros.
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.
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
- 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.
- Selecione Aplicação de consola e selecione Seguinte.
- Introduza EventHubsReceiver para o Nome do projeto e selecione Criar.
- 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
Selecione Ferramentas>NuGet Gestor de>Pacotes Consola do Gestor de Pacotes no menu.
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.
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:
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 oBlobContainerClient
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:
- 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.
- Especifica processadores para os eventos ProcessEventAsync e ProcessErrorAsync do objeto EventProcessorClient .
- Inicia o processamento de eventos ao invocar o StartProcessingAsync no objeto EventProcessorClient .
- 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; }
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.
Execute a aplicação recetora.
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.
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.
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.
- Exemplos de Hubs de Eventos no GitHub
- Exemplos do processador de eventos no GitHub
- Exemplo de controlo de acesso baseado em funções do Azure (RBAC do Azure)
Para obter uma referência completa da biblioteca .NET, veja a nossa documentação do SDK.
Passos seguintes
Veja o seguinte tutorial: