Guia de início rápido: enviar e receber mensagens de um tópico de namespace da Grade de Eventos do Azure (.NET)
Neste início rápido, você executa as seguintes etapas:
- Crie um namespace de Grade de Eventos, usando o portal do Azure.
- Crie um tópico de namespace de Grade de Eventos, usando o portal do Azure.
- Crie uma assinatura de evento, usando o portal do Azure.
- Escrever um aplicativo de console .NET para enviar um conjunto de mensagens para o tópico
- Escreva um aplicativo de console .NET para receber essas mensagens do tópico.
Nota
Este início rápido fornece instruções passo a passo para implementar um cenário simples de enviar um lote de mensagens para um Tópico de Namespace de Grade de Eventos e, em seguida, recebê-las. Para obter uma visão geral da biblioteca de cliente .NET, consulte Biblioteca de cliente da Grade de Eventos do Azure para .NET. Para obter mais exemplos, consulte Exemplos de Grade de Eventos .NET no GitHub.
Pré-requisitos
Se você for novo no serviço, consulte Visão geral da grade de eventos antes de fazer este início rápido.
- Subscrição do Azure. Para usar os serviços do Azure, incluindo a Grade de Eventos do Azure, você precisa de uma assinatura. Se não tiver uma conta existente do Azure, pode inscrever-se para uma avaliação gratuita.
- Visual Studio 2022. O aplicativo de exemplo faz uso de novos recursos que foram introduzidos no C# 10. Para usar a sintaxe mais recente, recomendamos que você instale o .NET 6.0 ou superior e defina a versão de idioma 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# 10.
Criar um espaço de nomes no portal do Azure
Um namespace na Grade de Eventos do Azure é um contêiner lógico para um ou mais tópicos, clientes, grupos de clientes, espaços de tópicos e associações de permissão. Ele fornece um namespace exclusivo, permitindo que você tenha vários recursos na mesma região do Azure. Com um namespace da Grade de Eventos do Azure, você pode agrupar agora recursos relacionados e gerenciá-los como uma única unidade em sua assinatura do Azure.
Siga as próximas seções para criar, exibir e gerenciar um namespace da Grade de Eventos do Azure.
Para criar um espaço de nomes:
Inicie sessão no portal do Azure.
Na caixa de pesquisa, insira Namespaces da Grade de Eventos e selecione Namespaces da Grade de Eventos nos resultados.
Na página Namespaces da Grade de Eventos, selecione + Criar na barra de ferramentas.
Na página Noções básicas, siga estas etapas.
Selecione a assinatura do Azure na qual você deseja criar o namespace.
Selecione um grupo de recursos existente ou crie um grupo de recursos.
Insira um nome para o namespace.
Selecione a região ou o local onde deseja criar o namespace.
Selecione Rever + criar na parte inferior da página.
No separador Rever + criar, reveja as suas definições e selecione Criar.
Na página Implantação bem-sucedida, selecione Ir para o recurso para navegar até seu namespace.
Criar um tópico de namespace
Se você não estiver na página Namespace da Grade de Eventos, siga as etapas de criação, exibição e gerenciamento de namespaces para exibir o namespace que deseja usar para criar o tópico.
Na página Namespace da Grade de Eventos , selecione a opção Tópicos na seção Agente de eventos no menu à esquerda.
Na página Tópicos, selecione o botão + Tópico na barra de comandos.
Na página Criar Tópico, digite o nome do tópico que deseja criar e selecione Criar.
Criar uma subscrição de evento
Se você estiver na página Tópicos do namespace Grade de Eventos no portal do Azure, selecione seu tópico na lista de tópicos. Se você estiver na página Tópicos, siga as instruções de criar, exibir e gerenciar tópicos de namespace para identificar o tópico que deseja usar para criar a assinatura do evento.
Na página Event Gird Namespace Topic, selecione a opção Assinaturas na seção Entidades no menu à esquerda.
Na página Assinaturas, selecione o botão "+ Assinatura" na barra de comandos.
No separador Noções básicas, siga estes passos:
Introduza um nome para a subscrição que pretende criar
Confirme se o esquema de entrega está definido Cloud Events v1.0.
Confirme se o modo de entrega está definido como Fila (modo pull).
Selecione Seguinte: Filtros na parte inferior da página.
Na guia Filtros, adicione os nomes dos tipos de evento que deseja filtrar na assinatura e adicione filtros de atributo de contexto que deseja usar na assinatura. Em seguida, selecione Avançar: Recursos adicionais na parte inferior da página.
Na guia Recursos adicionais, você pode especificar a retenção de eventos, a contagem máxima de entrega, a duração do bloqueio e as configurações de letras mortas.
Selecione Criar para criar a assinatura do evento.
Autenticar o aplicativo no Azure
Este início rápido mostra maneiras de se conectar à Grade de Eventos do Azure: cadeia de conexão. Esta seção mostra como usar uma cadeia de conexão para se conectar a um namespace de Grade de Eventos. Se você for novo no Azure, a opção de cadeia de conexão será mais fácil de seguir. A criação de um novo namespace de Grade de Eventos gera automaticamente uma chave primária e secundária inicial que concedem controle total sobre todos os aspetos do namespace ou tópicos. Um cliente pode usar a cadeia de conexão para se conectar ao namespace Grade de Eventos. Para copiar as chaves de acesso para o tópico do namespace, siga estas etapas:
Na página Namespace da Grade de Eventos, selecione Tópicos.
Selecione o tópico que você precisa acessar.
Na página Teclas de acesso, selecione o botão de cópia ao lado de Tecla 1 ou Tecla 2, para copiar as teclas de acesso para a área de transferência para uso posterior. Cole este valor no Bloco de Notas ou noutra localização temporária.
Iniciar o Visual Studio
Inicie o Visual Studio. Se você vir a janela Introdução , selecione o link Continuar sem código no painel direito.
Enviar mensagens para o tópico
Esta seção mostra como criar um aplicativo de console .NET para enviar mensagens para um tópico de grade de eventos.
Criar uma aplicação de consola
No Visual Studio, selecione o menu Arquivo ->Novo ->Projeto .
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.
Selecione C# para a linguagem de programação.
Selecione Console para o tipo do aplicativo.
Selecione Aplicativo de console na lista de resultados.
Em seguida, selecione Seguinte.
Digite EventSender para o nome do projeto, EventGridQuickStart para o nome da solução e selecione Avançar.
Na página Informações adicionais, selecione Criar para criar a solução e o projeto.
Adicionar os pacotes NuGet ao projeto
Selecione Ferramentas>NuGet Package Manager Package Manager>Console no menu.
Execute o seguinte comando para instalar o pacote NuGet Azure.Messaging.EventGrid:
Install-Package Azure.Messaging.EventGrid.Namespaces
Adicionar código para enviar evento ao tópico namespace
Substitua o conteúdo do pelo código a
Program.cs
seguir. As etapas importantes são delineadas, com informações adicionais nos comentários do código.Importante
Atualize os valores de espaço reservado (
<NAMESPACE-ENDPOINT>
,<TOPIC-NAME>
,<TOPIC-ACCESS-KEY>
,<TOPIC-SUBSCRIPTION-NAME>
) no trecho de código com seu ponto de extremidade de namespace, nome do tópico e chave do tópico.using Azure.Messaging; using Azure; using Azure.Messaging.EventGrid.Namespaces; // TODO: Replace the following placeholders with appropriate values // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace. Prefix it with https://. // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. var namespaceEndpoint = "<NAMESPACE-ENDPOINT>"; // Name of the topic in the namespace var topicName = "<TOPIC-NAME>"; // Access key for the topic var topicKey = "<TOPIC-ACCESS-KEY>"; // Construct the client using an Endpoint for a namespace as well as the access key var client = new EventGridSenderClient(new Uri(namespaceEndpoint), topicName, new AzureKeyCredential(topicKey)); // Publish a single CloudEvent using a custom TestModel for the event data. var @ev = new CloudEvent("employee_source", "type", new TestModel { Name = "Bob", Age = 18 }); await client.SendAsync(ev); // Publish a batch of CloudEvents. await client.SendAsync( new[] { new CloudEvent("employee_source", "type", new TestModel { Name = "Tom", Age = 55 }), new CloudEvent("employee_source", "type", new TestModel { Name = "Alice", Age = 25 })}); Console.WriteLine("Three events have been published to the topic. Press any key to end the application."); Console.ReadKey(); public class TestModel { public string Name { get; set; } public int Age { get; set; } }
Crie o projeto e certifique-se de que não há erros.
Execute o programa e aguarde a mensagem de confirmação.
Three events have been published to the topic. Press any key to end the application.
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.
No portal do Azure, siga estas etapas:
Extrair mensagens do tópico
Nesta seção, você cria um aplicativo de console .NET que recebe mensagens do tópico.
Criar um projeto para receber os CloudEvents publicados
- Na janela Gerenciador de Soluções, clique com o botão direito do mouse na solução EventGridQuickStart, aponte para Adicionar e selecione Novo Projeto.
- Selecione Aplicativo de console e selecione Avançar.
- Digite EventReceiver para o nome do projeto e selecione Criar.
- Na janela Gerenciador de Soluções, clique com o botão direito do mouse em EventReceiver e selecione Definir como um Projeto de Inicialização.
Adicionar os pacotes NuGet ao projeto
Selecione Ferramentas>NuGet Package Manager Package Manager>Console no menu.
Execute o seguinte comando para instalar o pacote NuGet Azure.Messaging.EventGrid. Selecione EventReceiver para o projeto Default se ainda não estiver definido.
Install-Package Azure.Messaging.EventGrid.Namespaces
Adicionar o código para receber eventos do tópico
Nesta seção, você adiciona código para recuperar mensagens da fila.
Dentro da
Program
classe, adicione o seguinte código:Importante
Atualize os valores de espaço reservado (
<NAMESPACE-ENDPOINT>
,<TOPIC-NAME>
,<TOPIC-ACCESS-KEY>
,<TOPIC-SUBSCRIPTION-NAME>
) no trecho de código com seu ponto de extremidade de namespace, nome do tópico, chave do tópico, nome da assinatura do tópico.using Azure; using Azure.Messaging; using Azure.Messaging.EventGrid.Namespaces; // TODO: Replace the following placeholders with appropriate values // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace // Example: https://namespace01.eastus-1.eventgrid.azure.net. var namespaceEndpoint = "<NAMESPACE-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. // Name of the topic in the namespace var topicName = "<TOPIC-NAME>"; // Access key for the topic var topicKey = "<TOPIC-ACCESS-KEY>"; // Name of the subscription to the topic var subscriptionName = "<TOPIC-SUBSCRIPTION-NAME>"; // Maximum number of events you want to receive const short MaxEventCount = 3; // Construct the client using an Endpoint for a namespace as well as the access key var client = new EventGridReceiverClient(new Uri(namespaceEndpoint), topicName, subscriptionName, new AzureKeyCredential(topicKey)); // Receive the published CloudEvents. ReceiveResult result = await client.ReceiveAsync(MaxEventCount); Console.WriteLine("Received Response"); Console.WriteLine("-----------------");
Anexe os seguintes métodos ao final da
Program
classe.// handle received messages. Define these variables on the top. var toRelease = new List<string>(); var toAcknowledge = new List<string>(); var toReject = new List<string>(); // Iterate through the results and collect the lock tokens for events we want to release/acknowledge/result foreach (ReceiveDetails detail in result.Details) { CloudEvent @event = detail.Event; BrokerProperties brokerProperties = detail.BrokerProperties; Console.WriteLine(@event.Data.ToString()); // The lock token is used to acknowledge, reject or release the event Console.WriteLine(brokerProperties.LockToken); Console.WriteLine(); // If the event is from the "employee_source" and the name is "Bob", we are not able to acknowledge it yet, so we release it if (@event.Source == "employee_source" && @event.Data.ToObjectFromJson<TestModel>().Name == "Bob") { toRelease.Add(brokerProperties.LockToken); } // acknowledge other employee_source events else if (@event.Source == "employee_source") { toAcknowledge.Add(brokerProperties.LockToken); } // reject all other events else { toReject.Add(brokerProperties.LockToken); } } // Release/acknowledge/reject the events if (toRelease.Count > 0) { ReleaseResult releaseResult = await client.ReleaseAsync(toRelease); // Inspect the Release result Console.WriteLine($"Failed count for Release: {releaseResult.FailedLockTokens.Count}"); foreach (FailedLockToken failedLockToken in releaseResult.FailedLockTokens) { Console.WriteLine($"Lock Token: {failedLockToken.LockToken}"); Console.WriteLine($"Error Code: {failedLockToken.Error}"); Console.WriteLine($"Error Description: {failedLockToken.ToString}"); } Console.WriteLine($"Success count for Release: {releaseResult.SucceededLockTokens.Count}"); foreach (string lockToken in releaseResult.SucceededLockTokens) { Console.WriteLine($"Lock Token: {lockToken}"); } Console.WriteLine(); } if (toAcknowledge.Count > 0) { AcknowledgeResult acknowledgeResult = await client.AcknowledgeAsync(toAcknowledge); // Inspect the Acknowledge result Console.WriteLine($"Failed count for Acknowledge: {acknowledgeResult.FailedLockTokens.Count}"); foreach (FailedLockToken failedLockToken in acknowledgeResult.FailedLockTokens) { Console.WriteLine($"Lock Token: {failedLockToken.LockToken}"); Console.WriteLine($"Error Code: {failedLockToken.Error}"); Console.WriteLine($"Error Description: {failedLockToken.ToString}"); } Console.WriteLine($"Success count for Acknowledge: {acknowledgeResult.SucceededLockTokens.Count}"); foreach (string lockToken in acknowledgeResult.SucceededLockTokens) { Console.WriteLine($"Lock Token: {lockToken}"); } Console.WriteLine(); } if (toReject.Count > 0) { RejectResult rejectResult = await client.RejectAsync(toReject); // Inspect the Reject result Console.WriteLine($"Failed count for Reject: {rejectResult.FailedLockTokens.Count}"); foreach (FailedLockToken failedLockToken in rejectResult.FailedLockTokens) { Console.WriteLine($"Lock Token: {failedLockToken.LockToken}"); Console.WriteLine($"Error Code: {failedLockToken.Error}"); Console.WriteLine($"Error Description: {failedLockToken.ToString}"); } Console.WriteLine($"Success count for Reject: {rejectResult.SucceededLockTokens.Count}"); foreach (string lockToken in rejectResult.SucceededLockTokens) { Console.WriteLine($"Lock Token: {lockToken}"); } Console.WriteLine(); } public class TestModel { public string Name { get; set; } public int Age { get; set; } }
Na janela Gerenciador de Soluções, clique com o botão direito do mouse no projeto EventReceiver e selecione Definir como projeto de inicialização.
Crie o projeto e certifique-se de que não há erros.
Execute o aplicativo EventReceiver e confirme que você verá os três eventos na janela de saída.
Clean up resources (Limpar recursos)
Navegue até o namespace da Grade de Eventos no portal do Azure e selecione Excluir no portal do Azure para excluir o namespace da Grade de Eventos e o tópico nele.
Tópicos relacionados
Consulte Referência da API do .NET.