Freigeben über


Schnellstart: Erste Schritte mit Azure Service Bus-Themen und -Abonnements (.NET)

In diesem Schnellstart erfahren Sie, wie mithilfe der .NET-Bibliothek Azure.Messaging.ServiceBus Nachrichten an ein Service Bus-Thema gesendet und von einem Abonnement dieses Themas empfangen werden.

Diese Schnellstartanleitung umfasst folgende Schritte:

  1. Erstellen eines Service Bus-Namespace mithilfe des Azure-Portals
  2. Erstellen eines Service Bus-Themas mithilfe des Azure-Portals
  3. Erstellen eines Service Bus-Abonnements für dieses Thema mit dem 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 Abonnement empfängt.

Hinweis

In diesem Schnellstart wird die Implementierung eines einfachen Szenarios ausführlich erläutert, bei dem Sie einen Batch von Nachrichten an ein Service Bus-Thema senden und diese Nachrichten von einem Abonnement des Themas empfangen werden. Weitere Beispiele zu anderen und erweiterten Szenarien finden Sie unter Service Bus-.NET-Beispiele auf GitHub.

  • In diesem Schnellstart werden zwei Möglichkeiten zum Herstellen einer Verbindung mit Azure Service Bus gezeigt: Verbindungszeichenfolge und kennwortlos. Die erste Option zeigt, wie Sie eine Verbindungszeichenfolge verwenden, um eine Verbindung mit einem Service Bus-Namespace herzustellen. Die zweite Option zeigt, wie Sie über Ihren Sicherheitsprinzipal in Microsoft Entra ID und die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) eine Verbindung mit einem Service Bus-Namespace herstellen. Sie müssen sich keine Gedanken darüber machen, dass hartcodierte Verbindungszeichenfolgen in Ihrem Code oder in einer Konfigurationsdatei oder in einem sicheren Speicher wie Azure Key Vault vorhanden sind. Wenn Sie noch nicht mit Azure vertraut sind, ist die Option mit einer Verbindungszeichenfolge möglicherweise einfacher. In realen Anwendungen und Produktionsumgebungen wird die kennwortlose Option empfohlen. Weitere Informationen finden Sie unter Authentifizierung und Autorisierung.

Voraussetzungen

Wenn Sie mit dem Dienst noch keine Erfahrung haben, informieren Sie sich über den Abschnitt Was ist Azure Service Bus?, 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 Service Bus. 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. Die Service Bus-Clientbibliothek kann zwar auch mit älteren Versionen von C# verwendet werden, die Syntax unterscheidet sich dann jedoch möglicherweise. 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

Um mit der Verwendung von Service Bus-Nachrichtenentitäten in Azure zu beginnen, erstellen Sie einen Namespace mit einem Namen, der in Azure eindeutig ist. Ein Namespace bietet einen Bereichscontainer für Service Bus-Ressourcen, z. B. Warteschlangen und Themen, in Ihrer Anwendung.

So erstellen Sie einen Namespace

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie das Flyoutmenü von oben links aus, und navigieren Sie zur Seite "Alle Dienste".

  3. Wählen Sie auf der linken Navigationsleiste "Integration" aus.

  4. Scrollen Sie nach unten zu Messaging services>Service Bus , und wählen Sie "Erstellen" aus.

    Screenshot der Auswahl von

  5. Führen Sie auf der Registerkarte " Grundlagen " der Seite " Namespace erstellen " die folgenden Schritte aus:

    1. Wählen Sie unter Abonnement ein Azure-Abonnement aus, in dem der Namespace erstellt werden soll.

    2. Wählen Sie für Ressourcengruppe eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue.

    3. Geben Sie einen Namespacenamen ein, der die folgenden Benennungskonventionen erfüllt:

      • Der Name muss innerhalb von Azure eindeutig sein. Das System überprüft sofort, ob dieser Name verfügbar ist.
      • Die Länge des Namens beträgt mindestens 6 und maximal 50 Zeichen.
      • Der Name darf nur Buchstaben, Zahlen, Bindestriche (-) enthalten.
      • Der Name muss mit einem Buchstaben beginnen und mit einem Buchstaben oder einer Ziffer enden.
      • Der Name darf nicht mit -sb oder -mgmt enden.
    4. Wählen Sie für Speicherort die Region aus, in der der Namespace gehostet werden soll.

    5. Wählen Sie unter Tarif den Tarif (Basic, Standard oder Premium) für den Namespace aus. Wählen Sie für diesen Schnellstart die Option Standard aus.

      Wenn Sie premium-Ebene auswählen, können Sie die Georeplikation für den Namespace aktivieren. Die Georeplikationsfunktion stellt sicher, dass die Metadaten und Daten eines Namespace kontinuierlich aus einer primären Region in eine oder mehrere sekundäre Regionen repliziert werden.

      Wichtig

      Wenn Sie Themen und Abonnements nutzen möchten, wählen Sie entweder Standard oder Premium aus. Themen und Abonnements werden im Preisniveau "Basic" nicht unterstützt.

      Wenn Sie den Tarif Premium auswählen, geben Sie die Anzahl von Messagingeinheiten an. Der Premium-Tarif bietet Ressourcenisolierung auf CPU- und Arbeitsspeicherebene, sodass die einzelnen Workloads voneinander isoliert ausgeführt werden. Dieser Ressourcencontainer wird als Messaging-Einheit bezeichnet. Ein Premium-Namespace verfügt über mindestens eine Messagingeinheit. Sie können 1, 2, 4, 8 oder 16 Messagingeinheiten für jeden Service Bus Premium-Namespace auswählen. Weitere Informationen finden Sie unter Service Bus Premium Messaging-Stufe.

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

      Screenshot der Seite

    7. Überprüfen Sie die Einstellungen auf der Seite Überprüfen und erstellen, und wählen Sie Erstellen aus.

  6. Nachdem die Bereitstellung der Ressource erfolgreich war, wählen Sie auf der Bereitstellungsseite "Zur Ressource wechseln " aus.

    Screenshot der Seite

  7. Die Startseite für Ihren Service Bus-Namespace wird angezeigt.

    Screenshot der Startseite des erstellten ServiceBus-Namespaces.

Erstellen eines Themas mit dem Azure-Portal

  1. Erweitern Sie auf der Seite Service Bus-Namespace im linken Navigationsmenü die Option Entitäten, und wählen Sie im linken Menü die Option Themen aus.

  2. Wählen Sie auf der Symbolleiste die Option + Thema aus.

  3. Geben Sie unter Name einen Namen für das Thema ein. Behalten Sie bei den anderen Optionen die Standardwerte bei.

  4. Klicken Sie auf Erstellen.

    Screenshot der Seite „Thema erstellen“ im Azure-Portal

Erstellen eines Abonnements für das Thema

  1. Wählen Sie das Thema aus, das Sie im vorherigen Abschnitt erstellt haben.

    Screenshot der Auswahl des Themas aus der Themenliste.

  2. Wählen Sie auf der Seite Service Bus-Thema auf der Symbolleiste die Option + Abonnement aus.

    Screenshot der Schaltfläche „Abonnement hinzufügen“ auf der Themenseite.

  3. Führen Sie auf der Seite Abonnement erstellen die folgenden Schritte aus:

    1. Geben Sie S1 für Name des Abonnements ein.

    2. Wählen Sie dann Erstellen, um das Abonnement zu erstellen.

      Screenshot der Seite „Abonnement erstellen“

Authentifizieren der App bei Azure

In diesem Artikel werden zwei Möglichkeiten zum Herstellen einer Verbindung mit Azure Service Bus erläutert: kennwortlose und Verbindungszeichenfolge.

Die erste Option zeigt, wie Sie über Ihren Sicherheitsprinzipal in Microsoft Entra ID und die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) eine Verbindung mit einem Service Bus-Namespace herstellen. Sie müssen sich keine Sorgen machen, dass Sie eine hartcodierte Verbindungszeichenfolge in Ihrem Code, in einer Konfigurationsdatei oder in einem sicheren Speicher wie Azure Key Vault haben.

Die zweite Option zeigt, wie Sie mithilfe einer Verbindungszeichenfolge eine Verbindung mit einem Service Bus-Namespace herstellen. Wenn Sie noch nicht mit Azure vertraut sind, ist die Option mit einer Verbindungszeichenfolge möglicherweise einfacher. In realen Anwendungen und Produktionsumgebungen wird die kennwortlose Option empfohlen. Weitere Informationen finden Sie unter Service Bus-Authentifizierung und Autorisierung. Weitere Informationen zur kennwortlosen Authentifizierung finden Sie unter Authentifizieren von .NET-Apps.

Zuweisen von Rollen zu Ihrem Microsoft Entra-Benutzer

Wenn Sie lokal entwickeln, stellen Sie sicher, dass das Benutzerkonto, das eine Verbindung mit Azure Service Bus herstellt, über die richtigen Berechtigungen verfügt. Sie benötigen die Rolle des Azure Service Bus-Datenbesitzers , um Nachrichten zu senden und zu empfangen. Um sich selbst diese Rolle zuzuweisen, benötigen Sie die Rolle des Benutzerzugriffsadministrators oder eine andere Rolle, die die Microsoft.Authorization/roleAssignments/write Aktion enthält.

Sie können einem Benutzer Azure RBAC-Rollen über das Azure-Portal, die Azure CLI oder mit Azure PowerShell zuweisen. Weitere Informationen zu den verfügbaren Bereichen für Rollenzuweisungen finden Sie unter "Grundlegendes zum Bereich für Azure RBAC".

Im folgenden Beispiel wird Ihrem Benutzerkonto die Rolle Azure Service Bus Data Owner zugewiesen. Diese Rolle bietet Vollzugriff auf Azure Service Bus-Ressourcen. Befolgen Sie in einem realen Szenario das Prinzip der geringsten Berechtigung , um Benutzern nur die Mindestberechtigungen zu erteilen, die für eine sicherere Produktionsumgebung erforderlich sind.

Integrierte Azure-Rollen für Azure Service Bus

Bei Azure Service Bus ist die Verwaltung der Namespaces und aller zugehörigen Ressourcen über das Azure-Portal und die Azure-Ressourcenverwaltungs-API bereits durch das Azure RBAC-Modell geschützt. Azure stellt die folgenden in Azure integrierten Rollen zum Autorisieren des Zugriffs auf einen Service Bus-Namespace bereit:

  • Azure Service Bus Data Owner: Ermöglicht den Datenzugriff auf den Service Bus-Namespace und seine Entitäten, einschließlich Warteschlangen, Themen, Abonnements und Filtern. Ein Mitglied dieser Rolle kann Nachrichten an Warteschlangen oder Themen/Abonnements senden bzw. aus diesen empfangen.
  • Azure Service Bus Data Sender: Verwenden Sie diese Rolle, um den Zugriff auf den send Service Bus-Namespace und seine Entitäten zu gewähren.
  • Azure Service Bus Data Receiver: Verwenden Sie diese Rolle, um den Zugriff auf den receive Service Bus-Namespace und seine Entitäten zu gewähren.

Informationen zum Erstellen einer benutzerdefinierten Rolle finden Sie unter Erforderliche Rechte für Service Bus-Vorgänge.

Hinzufügen eines Microsoft Entra-Benutzers zur Azure Service Bus-Besitzerrolle

Fügen Sie auf Service Bus-Namespace-Ebene Ihren Microsoft Entra-Benutzernamen der Rolle Azure Service Bus-Datenbesitzer hinzu. Diese Konfiguration ermöglicht es einer App, die im Kontext Ihres Benutzerkontos ausgeführt wird, Nachrichten an eine Warteschlange oder ein Thema zu senden. Sie kann Nachrichten aus einer Warteschlange oder einem Abonnement eines Themas empfangen.

Wichtig

In der Regel dauert die Verteilung der Rollenzuweisung in Azure ein bis zwei Minuten. In seltenen Fällen kann es 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.

  1. Wenn die Seite „Service Bus-Namespace“ im Azure-Portal nicht geöffnet ist, ermitteln Sie Ihren Service Bus-Namespace über die Hauptsuchleiste oder den linken Navigationsbereich.

  2. Wählen Sie auf der Seite "Übersicht " im linken Menü die Option Access Control (IAM) aus.

  3. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Registerkarte Rollenzuweisungen aus.

  4. Wählen Sie im oberen Menü +Hinzufügen und dann Rollenzuweisung hinzufügen aus.

    Ein Screenshot zeigt, wie eine Rolle zugewiesen wird.

  5. Über das Suchfeld können Sie die Ergebnisse für die gewünschte Rolle filtern. Suchen Sie in diesem Beispiel nach Azure Service Bus Data Owner, und wählen Sie das entsprechende Ergebnis aus. Klicken Sie dann auf Weiter.

  6. Wählen Sie unter Zugriff zuweisen zu die Option Benutzer, Gruppe oder Dienstprinzipal und dann die Option + Mitglieder auswählen aus.

  7. Suchen Sie im Dialogfeld nach Ihrem Microsoft Entra-Benutzernamen (normalerweise Ihre E-Mail-Adresse benutzer@domäne), und wählen Sie unten im Dialogfeld Auswählen aus.

  8. Wählen Sie Überprüfen und zuweisen aus, um zur letzten Seite zu gelangen, und wählen Sie erneut Überprüfen und zuweisen aus, um den Vorgang abzuschließen.

Starten von Visual Studio

Der Zugriff auf den Service Bus-Namespace kann mithilfe der folgenden Schritte autorisiert werden:

  1. Starten Sie Visual Studio. Wenn das Fenster Erste Schritte angezeigt wird, wählen Sie im rechten Bereich den Link Ohne Code fortfahren aus.

  2. Wählen Sie oben rechts in Visual Studio die Schaltfläche Anmelden aus.

    Screenshot: Schaltfläche zum Anmelden bei Azure mit Visual Studio.

  3. Melden Sie sich mit dem Microsoft Entra-Konto an, dem Sie zuvor eine Rolle zugewiesen haben.

    Screenshot der Kontoauswahl.

Senden von Nachrichten an das Thema

In diesem Abschnitt erfahren Sie, wie Sie eine .NET-Konsolenanwendung zum Senden von Nachrichten an ein Service Bus-Thema erstellen.

Hinweis

In diesem Schnellstart wird die Implementierung eines einfachen Szenarios ausführlich erläutert, bei dem Sie einen Batch von Nachrichten an ein Service Bus-Thema senden und diese Nachrichten von einem Abonnement des Themas empfangen werden. Weitere Beispiele zu anderen und erweiterten Szenarien finden Sie unter Service Bus-.NET-Beispiele auf GitHub.

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. Klicken Sie anschließend auf Weiter.

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

  3. Geben Sie als Projektnamen TopicSender und als Projektmappennamen ServiceBusTopicQuickStart ein, und wählen Sie dann Weiter aus.
  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.ServiceBus zu installieren.

    Install-Package Azure.Messaging.ServiceBus
    
  3. Führen Sie den folgenden Befehl aus, um das NuGet-Paket Azure.Identity zu installieren.

    Install-Package Azure.Identity
    

Hinzufügen von Code zum Senden von Nachrichten an das Thema

  1. Ersetzen Sie den Inhalt von "Program.cs" durch den folgenden Code. Die wichtigen Schritte sind in diesem Abschnitt aufgeführt und werden durch zusätzliche Informationen in den Codekommentaren ergänzt.

    1. Erstellt ein Objekt vom Typ ServiceBusClient unter Verwendung des Objekts DefaultAzureCredential. DefaultAzureCredential erkennt automatisch die Anmeldeinformationen Ihrer Visual Studio-Anmeldung für die Authentifizierung bei Azure Service Bus.
    2. Aufrufen der CreateSender-Methode für das ServiceBusClient-Objekt, um ein ServiceBusSender-Objekt für das angegebene Service Bus-Thema zu erstellen
    3. Erstellen eines ServiceBusMessageBatch-Objekts mithilfe von ServiceBusSender.CreateMessageBatchAsync
    4. Hinzufügen von Nachrichten zum Batch mithilfe von ServiceBusMessageBatch.TryAddMessage.
    5. Senden des Nachrichtenbatches an das Service Bus-Thema mithilfe der Methode ServiceBusSender.SendMessagesAsync

    Wichtig

    Aktualisieren Sie Platzhalterwerte (<NAMESPACE-NAME> und <TOPIC-NAME>) im Codeschnipsel mit den Namen Ihres Service Bus-Namespaces und -Themas.

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the sender used to publish messages to the topic
    ServiceBusSender sender;
    
    // number of messages to be sent to the topic
    const int numOfMessages = 3;
    
    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    
    //TODO: Replace the "<NAMESPACE-NAME>" and "<TOPIC-NAME>" placeholders.
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    sender = client.CreateSender("<TOPIC-NAME>");
    
    // create a batch 
    using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
    for (int i = 1; i <= numOfMessages; i++)
    {
        // try adding a message to the batch
        if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
        {
            // if it is too large for the batch
            throw new Exception($"The message {i} is too large to fit in the batch.");
        }
    }
    
    try
    {
        // Use the producer client to send the batch of messages to the Service Bus topic
        await sender.SendMessagesAsync(messageBatch);
        Console.WriteLine($"A batch of {numOfMessages} messages has been published to the topic.");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await sender.DisposeAsync();
        await client.DisposeAsync();
    }
    
    Console.WriteLine("Press any key to end the application");
    Console.ReadKey();
    
  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.

    A batch of 3 messages has been published to the topic
    

    Wichtig

    In der Regel dauert die Verteilung der Rollenzuweisung in Azure ein bis zwei Minuten. In seltenen Fällen kann es 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 Service Bus-Namespace.

    2. Wechseln Sie auf der Seite Übersicht unten im mittleren Bereich zur Registerkarte Themen, und wählen Sie das Service Bus-Thema aus. Im folgenden Beispiel ist dies mytopic.

      Auswählen des Themas

    3. Auf der Seite Service Bus-Thema unten im Abschnitt Metriken können Sie im Diagramm Nachrichten sehen, dass für das Thema drei eingehende Nachrichten vorhanden sind. Wenn der Wert nicht angezeigt wird, sollten Sie einige Minuten warten und die Seite dann aktualisieren, damit das aktualisierte Diagramm angezeigt wird.

      An das Thema gesendete Nachrichten

    4. Wählen Sie im unteren Bereich das Abonnement aus. Im folgenden Beispiel ist dies S1. Auf der Seite Service Bus-Abonnement wird für Anzahl aktiver Nachrichten der Wert 3 angezeigt. Das Abonnement hat die drei Nachrichten empfangen, die Sie an das Thema gesendet haben, aber sie wurden noch nicht von einem Empfänger abgerufen.

      Vom Abonnement empfangene Nachrichten

Empfangen von Nachrichten aus einem Abonnement

In diesem Abschnitt erstellen Sie eine .NET-Konsolenanwendung für den Empfang von Nachrichten aus dem Abonnement an das Service Bus-Thema.

Hinweis

In diesem Schnellstart wird die Implementierung eines einfachen Szenarios ausführlich erläutert, bei dem Sie einen Batch von Nachrichten an ein Service Bus-Thema senden und diese Nachrichten von einem Abonnement des Themas empfangen werden. Weitere Beispiele zu anderen und erweiterten Szenarien finden Sie unter Service Bus-.NET-Beispiele auf GitHub.

Erstellen eines Projekts für den Empfänger

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe ServiceBusTopicQuickStart, 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 SubscriptionReceiver als Projektnamen ein, und wählen Sie Weiter aus.
  4. Wählen Sie auf der Seite Zusätzliche Informationen die Option Erstellen aus.
  5. Klicken Sie im Fenster Projektmappen-Explorer mit der rechten Maustaste auf SubscriptionReceiver, 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. Wählen Sie SubscriptionReceiver als Standardprojekt in der Dropdownliste aus.

  3. Führen Sie den folgenden Befehl aus, um das NuGet-Paket Azure.Messaging.ServiceBus zu installieren.

    Install-Package Azure.Messaging.ServiceBus
    
  4. Führen Sie den folgenden Befehl aus, um das NuGet-Paket Azure.Identity zu installieren.

    Install-Package Azure.Identity
    

Hinzufügen von Code für das Empfangen von Nachrichten aus dem Abonnement

In diesem Abschnitt fügen Sie Code hinzu, mit dem Nachrichten vom Abonnement abgerufen werden.

  1. Ersetzen Sie den vorhandenen Inhalt von Program.cs durch die folgenden Eigenschaften und Methoden:

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the subscription
    ServiceBusProcessor processor;    
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  2. Fügen Sie am Ende von Program.cs den folgenden Code hinzu.

    • Erstellt ein Objekt vom Typ ServiceBusClient unter Verwendung des Objekts DefaultAzureCredential. DefaultAzureCredential erkennt automatisch die Anmeldeinformationen Ihrer Visual Studio-Anmeldung für die Authentifizierung bei Azure Service Bus.
    • Aufrufen der CreateProcessor-Methode für das ServiceBusClient-Objekt zum Erstellen eines ServiceBusProcessor-Objekts für das angegebene Service Bus-Thema.
    • Angeben von Handlern für die Ereignisse ProcessMessageAsync und ProcessErrorAsync des ServiceBusProcessor-Objekts
    • Starten der Verarbeitung von Nachrichten durch Aufrufen von StartProcessingAsync für das ServiceBusProcessor-Objekt
    • Aufrufen von StopProcessingAsync für das ServiceBusProcessor-Objekt, wenn der Benutzer eine Taste zum Beenden der Verarbeitung drückt

    Wichtig

    Aktualisieren Sie Platzhalterwerte (<NAMESPACE-NAME>, <TOPIC-NAME>, <SUBSCRIPTION-NAME>) im Codeschnipsel mit den Namen Ihres Service Bus-Namespaces, -Themas und -Abonnements.

    Weitere Informationen finden Sie in den Codekommentaren.

    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    //
    // Create the clients that we'll use for sending and processing messages.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
  3. Program.cs sollte wie folgt aussehen:

    using System;
    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the subscription
    ServiceBusProcessor processor;
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    //
    // Create the clients that we'll use for sending and processing messages.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
  4. Erstellen Sie das Projekt, und vergewissern Sie sich, dass keine Fehler vorhanden sind.

  5. Führen Sie die Empfängeranwendung aus. Nun sollten die empfangenen Nachrichten angezeigt werden. Drücken Sie eine beliebige Taste, um Empfänger und Anwendung zu beenden.

    Wait for a minute and then press any key to end the processing
    Received: Message 1 from subscription: S1
    Received: Message 2 from subscription: S1
    Received: Message 3 from subscription: S1
    
    Stopping the receiver...
    Stopped receiving messages
    
  6. Sehen Sie sich erneut die Informationen im Portal an.

    • Auf der Seite Service Bus-Thema werden im Diagramm Nachrichten drei ein- und drei ausgehende Nachrichten angezeigt. Falls diese Zahlen nicht angezeigt werden, sollten Sie einige Minuten warten und die Seite dann aktualisieren, damit der aktuelle Stand im Diagramm angezeigt wird.

      Gesendete und empfangene Nachrichten

    • Auf der Seite Service Bus-Abonnement wird für Anzahl aktiver Nachrichten der Wert „0“ angezeigt. Dies liegt daran, dass ein Empfänger Nachrichten von diesem Abonnement empfangen und den Vorgang für die Nachrichten abgeschlossen hat.

      „Anzahl aktiver Nachrichten“ aufseiten des Abonnements

Weitere Informationen finden Sie in der folgenden Dokumentation bzw. unter den folgenden Beispielen: