Snabbstart: Skicka och ta emot meddelanden från ett Azure Event Grid-namnområdesämne (.NET)
I den här snabbstarten gör du följande:
- Skapa ett Event Grid-namnområde med hjälp av Azure Portal.
- Skapa ett Event Grid-namnområdesavsnitt med hjälp av Azure Portal.
- Skapa en händelseprenumeration med hjälp av Azure Portal.
- Skriva ett .NET-konsolprogram för att skicka en uppsättning meddelanden till ämnet
- Skriv ett .NET-konsolprogram för att ta emot dessa meddelanden från ämnet.
Kommentar
Den här snabbstarten innehåller stegvisa instruktioner för att implementera ett enkelt scenario med att skicka en batch meddelanden till ett Event Grid-namnområdesämne och sedan ta emot dem. En översikt över .NET-klientbiblioteket finns i Azure Event Grid-klientbiblioteket för .NET. Fler exempel finns i Event Grid .NET-exempel på GitHub.
Förutsättningar
Om du är nybörjare på tjänsten kan du läsa Översikt över Event Grid innan du gör den här snabbstarten.
- Azure-prenumeration. Om du vill använda Azure-tjänster, inklusive Azure Event Grid, behöver du en prenumeration. Om du inte har ett befintligt Azure-konto kan du registrera dig för en kostnadsfri utvärderingsversion.
- Visual Studio 2022. Exempelprogrammet använder nya funktioner som introducerades i C# 10. Om du vill använda den senaste syntaxen rekommenderar vi att du installerar .NET 6.0 eller senare och anger språkversionen till
latest
. Om du använder Visual Studio är versioner före Visual Studio 2022 inte kompatibla med de verktyg som behövs för att skapa C# 10-projekt.
Skapa ett namnområde i Azure Portal
Ett namnområde i Azure Event Grid är en logisk container för ett eller flera ämnen, klienter, klientgrupper, ämnesutrymmen och behörighetsbindningar. Det ger ett unikt namnområde så att du kan ha flera resurser i samma Azure-region. Med ett Azure Event Grid-namnområde kan du gruppera nu relaterade resurser och hantera dem som en enda enhet i din Azure-prenumeration.
Följ nästa avsnitt för att skapa, visa och hantera ett Azure Event Grid-namnområde.
Så här skapar du ett namnområde:
Logga in på Azure-portalen.
I sökrutan anger du Event Grid-namnområden och väljer Event Grid-namnområden i resultatet.
På sidan Event Grid-namnområden väljer du + Skapa i verktygsfältet.
Följ dessa steg på sidan Grundläggande .
Välj den Azure-prenumeration där du vill skapa namnområdet.
Välj en befintlig resursgrupp eller skapa en resursgrupp.
Ange ett namn för namnrymden.
Välj den region eller plats där du vill skapa namnområdet.
Välj Granska + skapa längst ned på sidan.
På fliken Granska + skapa granskar du inställningarna och väljer Skapa.
På sidan Distributionen lyckades väljer du Gå till resurs för att navigera till ditt namnområde.
Skapa ett namnområdesavsnitt
Om du inte är på sidan Event Grid-namnområde följer du stegen skapa, visa och hantera namnområden för att visa det namnområde som du vill använda för att skapa ämnet.
På sidan Event Grid-namnområde väljer du Alternativet Ämnen i avsnittet Händelseutjämning på den vänstra menyn.
På sidan Ämnen väljer du knappen + Ämne i kommandofältet.
På sidan Skapa ämne skriver du namnet på det ämne som du vill skapa och väljer Skapa.
Skapa en händelseprenumeration
Om du är på sidan Ämnen i Event Grid-namnområdet i Azure Portal väljer du ditt ämne i listan med ämnen. Om du är på sidan Ämnen följer du anvisningarna från skapa, visa och hantera ett namnområdesavsnitt för att identifiera det ämne som du vill använda för att skapa händelseprenumerationen.
På sidan Namnområdesämne för händelse gird väljer du alternativet Prenumerationer i avsnittet Entiteter på den vänstra menyn.
På sidan Prenumerationer väljer du knappen "+ Prenumeration" i kommandofältet.
Följ dessa steg på fliken Grundläggande :
Ange ett namn för den prenumeration som du vill skapa
Bekräfta att leveransschemat har angetts till Cloud Events v1.0.
Bekräfta att leveransläget är inställt på Kö (pull-läge).
Välj Nästa: Filter längst ned på sidan.
På fliken Filter lägger du till namnen på de händelsetyper som du vill filtrera i prenumerationen och lägger till kontextattributfilter som du vill använda i prenumerationen. Välj sedan Nästa: Ytterligare funktioner längst ned på sidan.
På fliken Ytterligare funktioner kan du ange inställningarna för händelsekvarhållning, maximalt antal leveranser, låsvaraktighet och obeställbara bokstäver.
Välj Skapa för att skapa händelseprenumerationen.
Autentisera appen till Azure
Den här snabbstarten visar hur du ansluter till Azure Event Grid: anslutningssträng. Det här avsnittet visar hur du använder en anslutningssträng för att ansluta till ett Event Grid-namnområde. Om du inte har använt Azure tidigare är det anslutningssträng alternativet enklare att följa. När du skapar ett nytt Event Grid-namnområde genereras automatiskt en inledande primär och sekundär nyckel som var och en ger fullständig kontroll över alla aspekter av namnområdet eller ämnena. En klient kan använda anslutningssträng för att ansluta till Event Grid-namnområdet. Följ dessa steg för att kopiera åtkomstnycklarna för ditt namnområdesavsnitt:
På sidan Event Grid-namnområde väljer du Ämnen.
Välj det ämne som du behöver komma åt.
På sidan Åtkomstnycklar väljer du kopieringsknappen bredvid Nyckel 1 eller Nyckel 2 för att kopiera åtkomstnycklarna till Urklipp för senare användning. Klistra in det här värdet i Anteckningar eller på en tillfällig plats.
Starta Visual Studio
Starta Visual Studio. Om du ser fönstret Kom igång väljer du länken Fortsätt utan kod i den högra rutan.
Skicka meddelanden till ämnet
Det här avsnittet visar hur du skapar ett .NET-konsolprogram för att skicka meddelanden till ett Event Grid-ämne.
Skapa ett konsolprogram
I Visual Studio väljer du Arkiv ->Ny ->Projekt-meny .
I dialogrutan Skapa ett nytt projekt gör du följande: Om du inte ser den här dialogrutan väljer du Arkiv på menyn, väljer Nytt och sedan Projekt.
Välj C# för programmeringsspråket.
Välj Konsol för programmets typ.
Välj Konsolapp i resultatlistan.
Välj sedan Nästa.
Ange EventSender som projektnamn, EventGridQuickStart som lösningsnamn och välj sedan Nästa.
På sidan Ytterligare information väljer du Skapa för att skapa lösningen och projektet.
Lägg till NuGet-paketen i projektet
Välj Verktyg>NuGet Package Manager Package Manager-konsolen> på menyn.
Kör följande kommando för att installera Azure.Messaging.EventGrid NuGet-paketet:
Install-Package Azure.Messaging.EventGrid.Namespaces
Lägg till kod för att skicka händelsen till namnområdesavsnittet
Ersätt innehållet i
Program.cs
med följande kod. De viktiga stegen beskrivs med ytterligare information i kodkommentarna.Viktigt!
Uppdatera platshållarvärdena (
<NAMESPACE-ENDPOINT>
,<TOPIC-NAME>
,<TOPIC-ACCESS-KEY>
,<TOPIC-SUBSCRIPTION-NAME>
) i kodfragmentet med din namnområdesslutpunkt, ämnesnamn och ämnesnyckel.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; } }
Skapa projektet och se till att det inte finns några fel.
Kör programmet och vänta på bekräftelsemeddelandet.
Three events have been published to the topic. Press any key to end the application.
Viktigt!
I de flesta fall tar det en minut eller två innan rolltilldelningen sprids i Azure. I sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.
I Azure Portal följer du dessa steg:
Hämta meddelanden från ämnet
I det här avsnittet skapar du ett .NET-konsolprogram som tar emot meddelanden från ämnet.
Skapa ett projekt för att ta emot publicerade CloudEvents
- Högerklicka på lösningen EventGridQuickStart i Solution Explorer-fönstret, peka på Lägg till och välj Nytt projekt.
- Välj Konsolprogram och välj Nästa.
- Ange EventReceiver som Projektnamn och välj Skapa.
- I solution explorer-fönstret högerklickar du på EventReceiver och väljer Ange som ett startprojekt.
Lägg till NuGet-paketen i projektet
Välj Verktyg>NuGet Package Manager Package Manager-konsolen> på menyn.
Kör följande kommando för att installera Azure.Messaging.EventGrid NuGet-paketet. Välj EventReceiver för standardprojektet om det inte redan har angetts.
Install-Package Azure.Messaging.EventGrid.Namespaces
Lägg till koden för att ta emot händelser från ämnet
I det här avsnittet lägger du till kod för att hämta meddelanden från kön.
Lägg till följande kod i
Program
klassen:Viktigt!
Uppdatera platshållarvärdena (
<NAMESPACE-ENDPOINT>
,<TOPIC-NAME>
,<TOPIC-ACCESS-KEY>
,<TOPIC-SUBSCRIPTION-NAME>
) i kodfragmentet med namnområdets slutpunkt, ämnesnamn, ämnesnyckel, ämnets prenumerationsnamn.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("-----------------");
Lägg till följande metoder i slutet av
Program
klassen.// 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; } }
I Solution Explorer-fönstret högerklickar du på EventReceiver-projektet och väljer Ange som startprojekt.
Skapa projektet och se till att det inte finns några fel.
Kör EventReceiver-programmet och bekräfta att du ser de tre händelserna i utdatafönstret.
Rensa resurser
Gå till Event Grid-namnområdet i Azure Portal och välj Ta bort på Azure Portal för att ta bort Event Grid-namnområdet och ämnet i det.