Freigeben über


Schnellstart: Senden und Empfangen von Nachrichten an einen bzw. aus einem Azure Event Grid-Namespacethema (.NET)

Diese Schnellstartanleitung umfasst folgende Schritte:

  1. Erstellen eines Event Grid-Namespace mit dem Azure-Portal
  2. Erstellen eines Event Grid-Namespacethemas mit dem Azure-Portal
  3. Erstellen eines Ereignisabonnements über das Azure-Portal
  4. Schreiben einer .NET-Konsolenanwendung, die eine Gruppe von Nachrichten an das Thema sendet
  5. 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

  1. Melden Sie sich beim Azure-Portalan.

  2. Geben Sie im SuchfeldEreignisrasternamespaces ein, und wählen SieEvent Grid-Namespaces aus den Ergebnissen aus.

    Screenshot von Event Grid-Namespaces in den Suchergebnissen

  3. Wählen Sie auf der Seite Event Grid-Namespaces die Option + Erstellen auf der Symbolleiste aus.

    Screenshot der Seite „Event Grid-Namespaces“ mit der ausgewählten Schaltfläche „Erstellen“ auf der Symbolleiste

  4. Führen Sie auf der Seite Grundlagen die folgenden Schritte aus.

    1. Wählen Sie das Azure-Abonnement aus, in dem Sie den Namespace erstellen möchten.

    2. Wählen Sie eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine Ressourcengruppe.

    3. Geben Sie einen Namen für den Namespace ein.

    4. Wählen Sie die Region oder den Speicherort aus, an dem Sie den Namespace erstellen möchten.

    5. Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.

      Screenshot der Registerkarte „Grundlagen“ der Seite „Namespace erstellen“

  5. Überprüfen Sie Ihre Einstellungen auf der Registerkarte Überprüfen und erstellen, und wählen Sie Erstellen aus.

  6. Wählen Sie auf der Seite Bereitstellung erfolgreich die Option Zu Ressource wechseln aus, um zu Ihrem Namespace zu navigieren.

Erstellen eines Namespacethemas

  1. Wenn Sie nicht auf der Event Grid-Namespaceseite 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.

  2. Wählen Sie auf der Seite Event Grid-Namespace im linken Menü im Abschnitt Ereignisse die Option Themen aus.

  3. Wählen Sie auf der Seite Themen in der Befehlsleiste die Schaltfläche + Thema aus.

    Screenshot: Erstellung des Event Grid-Namespacethemas.

  4. Geben Sie auf der Registerkarte Thema erstellen den Namen des Themas ein, das Sie erstellen möchten, und wählen Sie dann Erstellen aus.

    Screenshot: Grundlagen der Erstellung des Event Grid-Namespacethemas.

Erstellen eines Ereignisabonnements

  1. 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.

  2. Wählen Sie auf der Seite Event Gird-Namespacethema die Option Abonnement links im Menü im Abschnitt Entitäten aus.

  3. Wählen Sie auf der Seite Abonnements auf der Befehlsleiste die Schaltfläche + Abonnement aus.

    Screenshot des Erstellens eines Event Grid-Ereignisabonnements.

  4. Geben Sie auf der Registerkarte Grundlagen den Namen des Themas ein, das Sie erstellen möchten, und wählen Sie dann unten auf der Seite Erstellen: Filter aus.

    Screenshot der Registerkarte „Grundlagen“ beim Erstellen eines Event Grid-Ereignisabonnements.

  5. 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.

    Screenshot der Registerkarte „Filter“ beim Erstellen eines Event Grid-Ereignisabonnements.

  6. 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.

    Screenshot der Registerkarte „Zusätzliche Features“ beim Erstellen eines Event Grid-Ereignisabonnements.

  7. 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 Dokument wird gezeigt, wie Sie eine Verbindungszeichenfolge verwenden, um eine Verbindung mit einem Event Grid-Namespace herzustellen. Wenn Sie noch nicht mit Azure vertraut sind, ist die Option mit der Verbindungszeichenfolge möglicherweise einfacher.

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:

  1. Wählen Sie auf der Seite Event Grid-Namespace die Option Themen aus.
  2. Wählen Sie das Thema aus, auf das Sie zugreifen müssen.
  3. 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

Der Zugriff auf den Event Grid-Namespace kann mithilfe der folgenden Schritte autorisiert werden:

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

  1. Wählen Sie in Visual Studio Datei ->Neu ->Projekt aus.

  2. 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.

    1. Wählen Sie die Programmiersprache C# aus.

    2. Wählen Sie den Anwendungstyp Konsole aus.

    3. Wählen Sie in der Ergebnisliste Konsolen-App aus.

    4. Wählen Sie anschließend Weiter aus.

      Screenshot: Dialogfeld „Neues Projekt erstellen“, in dem „C#“ und „Konsole“ ausgewählt sind

  3. Geben Sie EventSender als Projektname und EventGridQuickStart als Lösungsname ein, und wählen Sie anschließend Weiter aus.

    Screenshot: Name für Projektmappe und Projekt im Dialogfeld „Neues Projekt konfigurieren“

  4. 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

  1. Wählen Sie im Menü Extras>NuGet-Paket-Manager>Paket-Manager-Konsole aus.

  2. Führen Sie den folgenden Befehl aus, um das NuGet-Paket Azure.Messaging.EventGrid zu installieren:

    Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.1
    

Hinzufügen von Code zum Senden eines Ereignisses an das Namespacethema

  1. Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code. Die wichtigsten Schritte sind skizziert, mit zusätzlichen Informationen in den Codekommentaren.

    Wichtig

    Ersetzen Sie die Platzhalterwerte (<ENDPOINT>, <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, und <TOPIC-SUBSCRIPTION-NAME>) im Codeschnipsel mit Ihrem Themenendpunkt, dem Themennamen, dem Themenschlüssel und dem Namen des Themenabonnements.

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;    
    
    // TODO: Replace the <ENDPOINT> , <TOPIC-KEY> and <TOPIC-NAME> placeholder
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), 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.PublishCloudEventAsync(topicName, ev);
    
    // Publish a batch of CloudEvents.
    
    await client.PublishCloudEventsAsync(
    topicName,
    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; }
    }    
    
    
  2. Erstellen Sie das Projekt, und vergewissern Sie sich, dass keine Fehler vorhanden sind.

  3. 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.

  4. Gehen Sie im Azure-Portal wie folgt vor:

    1. Navigieren Sie zu Ihrem Event Grid-Namespace.

    2. Auf der Seite Übersicht wird die Anzahl der Ereignisse angezeigt, die im Namespace im Diagramm gepostet wurden.

      Screenshot: Seite „Event Grid-Namespace“ im Azure-Portal

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)

  1. 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.
  2. Wählen Sie zuerst Konsolenanwendung, dann Weiter aus.
  3. Geben Sie unter Projektname den Namen EventReceiver ein, and wählen Sie Erstellen aus.
  4. 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

  1. Wählen Sie im Menü Extras>NuGet-Paket-Manager>Paket-Manager-Konsole aus.

  2. 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 -version 4.22.0-beta.1
    

    Screenshot: Ausgewähltes EventReceiver-Projekt in der Paket-Manager-Konsole

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.

  1. Fügen Sie innerhalb der Klasse Program den folgenden Code hinzu:

    Wichtig

    Ersetzen Sie die Platzhalterwerte (<ENDPOINT>, <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, und <TOPIC-SUBSCRIPTION-NAME>) im Codeschnipsel mit Ihrem Themenendpunkt, dem Themennamen, dem Themenschlüssel und dem Namen des Themenabonnements.

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents
    ReceiveResult result = await client.ReceiveCloudEventsAsync(topicName, subscription, 3);
    
    Console.WriteLine("Received Response");
    Console.WriteLine("-----------------");
    
    
  2. 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.Value)
    {
        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.ReleaseCloudEventsAsync(topicName, subscription, new ReleaseOptions(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.AcknowledgeCloudEventsAsync(topicName, subscription, new AcknowledgeOptions(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.RejectCloudEventsAsync(topicName, subscription, new RejectOptions(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; }
    }    
    

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.

Weitere Informationen finden Sie in der ASP.NET API-Referenz.