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 über das Azure-Portal
  2. Erstellen eines Event Grid-Namespacethemas über das Azure-Portal
  3. Erstellen eines Ereignisabonnements über das Azure-Portal
  4. Schreiben einer .NET-Konsolenanwendung zum Senden von Nachrichten an das Thema
  5. Schreiben einer .NET-Konsolenanwendung zum Empfangen dieser Nachrichten aus dem Thema

Hinweis

In diesem Schnellstart 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 Beispielen auf GitHub.

Voraussetzungen

Wenn Sie noch keine Erfahrung mit dem Dienst haben, lesen Sie die Übersicht über Event Grid, bevor Sie die Schritte in diesem Schnellstart 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, Themenplätze und Berechtigungsbindungen. Mit einem Azure Event Grid-Namespace können Sie verwandte Ressourcen gruppieren und als einzelne Einheit in Ihrem Azure-Abonnement verwalten. Mit einem eindeutigen Namespace können Sie über mehrere Ressourcen in derselben Azure-Region verfügen.

So erstellen Sie einen Namespace

  1. Melden Sie sich beim Azure-Portal an.

  2. Geben Sie im Suchfeld Event Grid-Namespaces ein und wählen Sie Event 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 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 der Namespace erstellt werden soll.

    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 den Speicherort für den Namespace aus.

    5. Klicken Sie auf Überprüfen + erstellen.

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

  5. Überprüfen Sie Ihre Einstellungen auf der Registerkarte Überprüfen und Erstellen. Wählen Sie dann 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-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.

  2. Wählen Sie auf der Seite "Event Grid Namespace" unter "Ereignisbroker" die Option "Themen" aus.

  3. Wählen Sie auf der Seite "Themen"+Thema aus.

    Screenshot der 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 der 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.

    Screenshot der Seite

  2. Wählen Sie auf der Seite "Event Grid Namespace Topic " die Option "Abonnements " im Abschnitt "Entitäten " im linken Menü aus.

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

    Screenshot der Erstellung eines Event Grid-Ereignisabonnements

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

    1. Geben Sie einen Namen für das Abonnement ein, das Sie erstellen möchten.

    2. Vergewissern Sie sich, dass das Übermittlungsschema auf Cloud Events v1.0 festgelegt ist.

    3. Vergewissern Sie sich, dass der Übermittlungsmodus auf Warteschlange (Pullmodus) festgelegt ist.

    4. Wählen Sie am unteren Rand der Seite Weiter: 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 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 anfängliche Primär- und Sekundärschlüssel generiert, mit denen Sie jeweils die volle Kontrolle über sämtliche Aspekte des Namespace und 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.

    Screenshot der Zugriffstaste für ein Event Grid Thema.

Starten Sie 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

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

  2. Gehen Sie im Dialogfeld Neues Projekt erstellen wie folgt vor: Wenn dieses Dialogfeld nicht angezeigt wird, wählen Sie im Menü Datei aus, wählen Sie Neu aus, und wählen Sie dann 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. Klicken Sie anschließend auf Weiter.

      Screenshot des Dialogfelds „Neues Projekt erstellen“ mit ausgewählten Optionen „C#“ und „Konsole“

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

    Screenshot der Namen 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.Namespaces
    

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

    Aktualisieren Sie die Platzhalterwerte (<NAMESPACE-ENDPOINT>, <TOPIC-NAME>, <TOPIC-ACCESS-KEY>) im Codeausschnitt mit Ihrem Namespaceendpunkt, 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; }
    }
    
    
  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 der 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, und 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.Namespaces
    

    Screenshot des ausgewählten 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 (<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("-----------------");
    
    
  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.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; }
    }    
    
    
  3. Klicken Sie im Fenster Projektmappen-Explorer mit der rechten Maustaste auf EventReceiver Projekt, und wählen Sie Als Startprojekt festlegen aus.

  4. Erstellen Sie das Projekt, und vergewissern Sie sich, dass keine Fehler vorhanden sind.

  5. Führen Sie die EventReceiver-Anwendung aus, und bestätigen Sie, dass die drei Ereignisse im Ausgabefenster angezeigt werden.

    Screenshot der Ausgabe aus der Empfänger-App.

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.