Schnellstart: Senden und Empfangen von Nachrichten an einen bzw. aus einem Azure Event Grid-Namespacethema (.NET)
Diese Schnellstartanleitung umfasst folgende Schritte:
- Erstellen eines Event Grid-Namespace mit dem Azure-Portal
- Erstellen eines Event Grid-Namespacethemas mit dem Azure-Portal
- Erstellen eines Ereignisabonnements über das Azure-Portal
- Schreiben einer .NET-Konsolenanwendung, die eine Gruppe von Nachrichten an das Thema sendet
- Schreiben einer .NET-Konsolenanwendung, die diese Nachrichten aus dem Thema empfängt
Hinweis
In dieser Schnellstartanleitung wird Schritt für Schritt die Implementierung eines einfachen Szenarios erläutert, bei dem Sie einen Batch von Nachrichten an ein Event Grid-Thema senden und diese Nachrichten empfangen. Eine Übersicht über die .NET-Clientbibliothek finden Sie unter Azure Event Grid-Clientbibliothek für .NET. Weitere Beispiele finden Sie in den Event Grid-.NET Beispiele auf GitHub.
Voraussetzungen
Wenn Sie mit dem Dienst noch keine Erfahrung haben, lesen Sie die Übersicht über Event Grid, bevor Sie die Schritte in dieser Schnellstartanleitung durchführen.
- Azure-Abonnement. Für die Verwendung von Azure-Diensten benötigen Sie ein Abonnement. Das gilt auch für Azure Event Grid. Wenn Sie nicht über ein Azure-Konto verfügen, können Sie sich für eine kostenlose Testversion registrieren.
- Visual Studio 2022 Die Beispielanwendung nutzt neue Features, die in C# 10 eingeführt wurden. Um die neueste Syntax verwenden zu können, empfiehlt es sich, mindestens .NET 6.0 zu installieren und die Sprachversion auf
latest
festzulegen. Bei Verwendung von Visual Studio sind Versionen vor Visual Studio 2022 nicht mit den Tools kompatibel, die zum Erstellen von C# 10-Projekten erforderlich sind.
Erstellen eines Namespace im Azure-Portal
Ein Namespace in Azure Event Grid ist ein logischer Container für ein oder mehrere Themen, Clients, Clientgruppen, Themenbereiche und Berechtigungsbindungen. Er stellt einen eindeutigen Namespace bereit, sodass Sie mehrere Ressourcen in derselben Azure-Region verwenden können. Mit einem Azure Event Grid-Namespace können Sie jetzt verwandte Ressourcen gruppieren und als einzelne Einheit in Ihrem Azure-Abonnement verwalten.
Befolgen Sie die nächsten Abschnitte, um einen Azure Event Grid-Namespace zu erstellen, anzuzeigen und zu verwalten.
So erstellen Sie einen Namespace
Melden Sie sich beim Azure-Portalan.
Geben Sie im Suchfeld Ereignisrasternamespaces ein, und wählen SieEvent Grid-Namespaces aus den Ergebnissen aus.
Wählen Sie auf der Seite Event Grid-Namespaces die Option + Erstellen auf der Symbolleiste aus.
Führen Sie auf der Seite Grundlagen die folgenden Schritte aus.
Wählen Sie das Azure-Abonnement aus, in dem Sie den Namespace erstellen möchten.
Wählen Sie eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine Ressourcengruppe.
Geben Sie einen Namen für den Namespace ein.
Wählen Sie die Region oder den Speicherort aus, an dem Sie den Namespace erstellen möchten.
Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.
Überprüfen Sie Ihre Einstellungen auf der Registerkarte Überprüfen und erstellen, und wählen Sie Erstellen aus.
Wählen Sie auf der Seite Bereitstellung erfolgreich die Option Zu Ressource wechseln aus, um zu Ihrem Namespace zu navigieren.
Erstellen eines Namespacethemas
Wenn Sie nicht auf der Event Grid-Namespace-Seite sind, führen Sie die Schritte zum Erstellen, Anzeigen und Verwalten von Namespaces aus, um den Namespace anzuzeigen, den Sie zum Erstellen des Themas verwenden möchten.
Wählen Sie auf der Seite Event Grid-Namespace im linken Menü im Abschnitt Ereignisbroker die Option Themen aus.
Wählen Sie auf der Seite Themen in der Befehlsleiste die Schaltfläche + Thema aus.
Geben Sie auf der Registerkarte Thema erstellen den Namen des Themas ein, das Sie erstellen möchten, und wählen Sie dann Erstellen aus.
Erstellen eines Ereignisabonnements
Wenn Sie sich auf der Seite Themen Ihres Event Grid-Namespaces im Azure-Portal befinden, wählen Sie Ihr Thema aus der Liste der Themen aus. Wenn Sie sich auf der Seite Themen befinden, führen Sie die Anweisungen zum Erstellen, Anzeigen und Verwalten eines Namespacethemas aus, um das Thema zu identifizieren, mit dem Sie das Ereignisabonnement erstellen möchten.
Wählen Sie auf der Seite Event Gird-Namespacethema die Option Abonnement links im Menü im Abschnitt Entitäten aus.
Wählen Sie auf der Seite Abonnements auf der Befehlsleiste die Schaltfläche + Abonnement aus.
Führen Sie auf der Registerkarte Grundlagen die folgenden Schritte aus:
Geben Sie einen Namen für das Abonnement ein, das Sie erstellen möchten.
Vergewissern Sie sich, dass das Übermittlungsschema auf Cloud Events v1.0 festgelegt ist.
Vergewissern Sie sich, dass der Übermittlungsmodus auf Warteschlange (Pullmodus) festgelegt ist.
Klicken Sie auf Weiter: Filter unten auf der Seite.
Fügen Sie auf der Registerkarte Filter die Namen der Ereignistypen hinzu, die Sie im Abonnement filtern möchten, und fügen Sie Kontextattributefilter hinzu, die Sie im Abonnement verwenden möchten. Wählen Sie dann unten auf der Seite die Option Weiter: Zusätzliche Features aus.
In der Registerkarte Zusätzliche Funktionen können Sie die Ereignisaufbewahrung, die maximale Anzahl der Bereitstellungen, die Sperrdauer und die Einstellungen für „Inaktivierung“ angeben.
Wählen Sie Erstellen aus, um das Ereignisabonnement zu erstellen.
Authentifizieren der App bei Azure
In diesem Schnellstart werden Möglichkeiten zum Herstellen einer Verbindung mit Azure Event Grid gezeigt: Verbindungszeichenfolge. In diesem Abschnitt wird gezeigt, wie Sie eine Verbindungszeichenfolge verwenden, um eine Verbindung mit einem Event Grid-Namespace herzustellen. Wenn Sie noch nicht mit Azure arbeiten, ist die Verbindungszeichenfolgenoption einfacher zu befolgen. Beim Erstellen eines neuen Event Grid-Namespace werden automatisch ein anfänglicher Primär- und Sekundärschlüssel generiert, mit denen Sie jeweils die volle Kontrolle über sämtliche Aspekte des Namespace oder der Themen haben. Ein Client kann die Verbindungszeichenfolge verwenden, um eine Verbindung mit dem Event Grid-Namespace herzustellen. Führen Sie zum Kopieren der Zugriffsschlüssel für Ihr Namespacethema die folgenden Schritte aus:
Wählen Sie auf der Seite Event Grid-Namespace die Option Themen aus.
Wählen Sie das Thema aus, auf das Sie zugreifen müssen.
Wählen Sie auf der Seite Zugriffsschlüssel die Schaltfläche „Kopieren“ neben Schlüssel 1 oder Schlüssel 2 aus, um die Zugriffsschlüssel zur späteren Verwendung in die Zwischenablage zu kopieren. Fügen Sie diesen Wert in den Editor oder an einem anderen temporären Speicherort ein.
Starten von Visual Studio
Starten Sie Visual Studio. Wenn das Fenster Erste Schritte angezeigt wird, wählen Sie im rechten Bereich den Link Ohne Code fortfahren aus.
Senden von Nachrichten an das Thema
In diesem Abschnitt erfahren Sie, wie Sie eine .NET-Konsolenanwendung zum Senden von Nachrichten an ein Event Grid-Thema erstellen.
Erstellen einer Konsolenanwendung
Wählen Sie in Visual Studio Datei ->Neu ->Projekt aus.
Führen Sie im Dialogfeld Neues Projekt erstellen die folgenden Schritte aus: Sollte dieses Dialogfeld nicht angezeigt werden, wählen Sie im Menü die Option Datei und anschließend Neu > Projekt aus.
Wählen Sie die Programmiersprache C# aus.
Wählen Sie den Anwendungstyp Konsole aus.
Wählen Sie in der Ergebnisliste Konsolen-App aus.
Wählen Sie anschließend Weiter aus.
Geben Sie EventSender als Projektname und EventGridQuickStart als Lösungsname ein, und wählen Sie anschließend Weiter aus.
Wählen Sie auf der Seite Zusätzliche Informationen die Option Erstellen aus, um Projektmappe und Projekt zu erstellen.
Hinzufügen der NuGet-Pakete zum Projekt
Wählen Sie im Menü Extras>NuGet-Paket-Manager>Paket-Manager-Konsole aus.
Führen Sie den folgenden Befehl aus, um das NuGet-Paket Azure.Messaging.EventGrid zu installieren:
Install-Package Azure.Messaging.EventGrid.Namespaces
Hinzufügen von Code zum Senden eines Ereignisses an das Namespacethema
Ersetzen Sie den Inhalt von
Program.cs
durch den folgenden Code. Die wichtigsten Schritte sind skizziert, mit zusätzlichen Informationen in den Codekommentaren.Wichtig
Aktualisieren Sie Platzhalterwerte (
<NAMESPACE-ENDPOINT>
,<TOPIC-NAME>
,<TOPIC-ACCESS-KEY>
,<TOPIC-SUBSCRIPTION-NAME>
) im Codeausschnitt mit Ihrem Namespace-Endpunkt, dem Themennamen und dem Themenschlüssel.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; } }
Erstellen Sie das Projekt, und vergewissern Sie sich, dass keine Fehler vorhanden sind.
Führen Sie das Programm aus, und warten Sie auf die Bestätigungsmeldung.
Three events have been published to the topic. Press any key to end the application.
Wichtig
In der Regel dauert die Verteilung der Rollenzuweisung in Azure ein bis zwei Minuten. In seltenen Fällen kann sie aber bis zu acht Minuten dauern. Wenn bei der ersten Ausführung Ihres Codes Authentifizierungsfehler auftreten, warten Sie einige Momente, und versuchen Sie es dann erneut.
Gehen Sie im Azure-Portal wie folgt vor:
Pullen von Nachrichten aus dem Thema
In diesem Abschnitt wird eine .NET-Konsolenanwendung zum Empfangen von Nachrichten aus dem Thema erstellt.
Erstellen eines Projekts zum Empfangen der veröffentlichten Cloudereignisse (CloudEvents)
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe EventGridQuickStart, zeigen Sie auf Hinzufügen, und wählen Sie anschließend Neues Projekt aus.
- Wählen Sie zuerst Konsolenanwendung, dann Weiter aus.
- Geben Sie unter Projektname den Namen EventReceiver ein, and wählen Sie Erstellen aus.
- Klicken Sie im Fenster Projektmappen-Explorer mit der rechten Maustaste auf EventReceiver, und wählen Sie Als Startprojekt festlegen aus.
Hinzufügen der NuGet-Pakete zum Projekt
Wählen Sie im Menü Extras>NuGet-Paket-Manager>Paket-Manager-Konsole aus.
Führen Sie den folgenden Befehl aus, um das NuGet-Paket Azure.Messaging.EventGrid zu installieren. Wählen Sie EventReceiver für das Standardprojekt aus, wenn dies noch nicht festgelegt ist.
Install-Package Azure.Messaging.EventGrid.Namespaces
Hinzufügen des Codes zum Empfangen von Ereignissen aus dem Thema
In diesem Abschnitt fügen Sie Code hinzu, mit dem Nachrichten aus der Warteschlange abgerufen werden.
Fügen Sie innerhalb der Klasse
Program
den folgenden Code hinzu:Wichtig
Ersetzen Sie die Platzhalterwerte (
<NAMESPACE-ENDPOINT>
,<TOPIC-NAME>
,<TOPIC-ACCESS-KEY>
, und<TOPIC-SUBSCRIPTION-NAME>
) im Codeschnipsel mit Ihrem Namespace-Endpunkt, dem Themennamen, dem Themenschlüssel und dem Namen des Themenabonnements.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("-----------------");
Fügen Sie am Ende der Klasse
Program
die folgenden Methoden hinzu:// 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; } }
Klicken Sie im Fenster Projektmappen-Explorer mit der rechten Maustaste auf EventReceiver Projekt, und wählen Sie Als Startprojekt festlegen aus.
Erstellen Sie das Projekt, und vergewissern Sie sich, dass keine Fehler vorhanden sind.
Führen Sie die EventReceiver-Anwendung aus, und bestätigen Sie, dass die drei Ereignisse im Ausgabefenster angezeigt werden.
Bereinigen von Ressourcen
Navigieren Sie im Azure-Portal zu Ihrem Event Grid-Namespace, und wählen Sie Löschen im Azure-Portal aus, um den Event Grid-Namespace und das darin enthaltene Thema zu löschen.
Zugehörige Themen
Weitere Informationen finden Sie in der ASP.NET API-Referenz.