Freigeben über


Schnellstart: Senden von Nachrichten an und Empfangen von Nachrichten aus Azure Service Bus-Warteschlangen (Python)

Dieser Artikel enthält schrittweise Anleitungen für ein einfaches Szenario zum Senden von Nachrichten an eine ServiceBus-Warteschlange und zum Empfangen dieser Nachrichten. Sie finden vordefinierte JavaScript- und TypeScript-Beispiele für Azure Service Bus im Azure SDK für Python-Repository auf GitHub.

In dieser Schnellstartanleitung führen Sie die folgenden Schritte aus:

  • Erstellen eines Service Bus-Namespace mithilfe des Azure-Portals

  • Erstellen einer Service Bus-Warteschlange mithilfe des Azure-Portals

  • Schreiben Sie Python-Code, um das Azure-servicebus-Paket zu verwenden, um:

    • Senden einer Reihe von Nachrichten an die Warteschlange
    • Empfangen von Nachrichten aus der Warteschlange

Wenn Sie neu bei dem Dienst sind, lesen Sie die Übersicht über den ServiceBus, bevor Sie beginnen.

Voraussetzungen

Um diese Schnellstartanleitung mit Ihrem eigenen Azure-Konto verwenden zu können, wird Folgendes vorausgesetzt:

  • Installieren Sie die Azure CLI, um die kennwortlose Authentifizierung für Ihren Entwicklercomputer zu ermöglichen.
  • Melden Sie sich mit Ihrem Azure-Konto beim Terminal oder an der Eingabeaufforderung mit az login an.
  • Verwenden Sie das gleiche Konto, wenn Sie Ihrer Ressource die entsprechende Datenrolle hinzufügen.
  • Führen Sie den Code im gleichen Terminal oder an der gleichen Eingabeaufforderung aus.
  • Notieren Sie sich den Namen der Warteschlange für Ihren Service Bus-Namespace. Sie benötigen dies im Code.

Diese Schnellstartanleitung funktioniert mit Beispielen, die Sie mit Python kopieren und ausführen können. Anweisungen zum Erstellen einer Python-Anwendung finden Sie in der Schnellstartanleitung: Bereitstellen einer Python-Web-App für Azure App Service. Weitere Informationen zum Installieren von Paketen, die in dieser Schnellstartanleitung verwendet werden, finden Sie unter Installieren von Azure-Bibliothekspaketen für Python.

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 einer Warteschlange im Azure-Portal

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

  2. Wählen Sie auf der Seite Warteschlangen auf der Symbolleiste + Warteschlangeaus.

  3. Geben Sie einen Namen für die Warteschlange ein. Behalten Sie die anderen Werte mit ihren Standardwerten bei.

  4. Wählen Sie "Erstellen" aus.

    Screenshot der Seite „Warteschlange 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.

Installieren von Paketen mithilfe von pip

  1. Um die erforderlichen Python-Pakete für diesen Service Bus Schnellstart zu installieren, öffnen Sie ein Eingabeaufforderungsfenster mit Python in seinem Pfad.

  2. Ändern Sie das Verzeichnis in den Ordner, in dem Sie Ihre Beispiele speichern möchten.

  3. Installieren Sie die folgenden Pakete:

    pip install azure-servicebus
    pip install azure-identity
    pip install aiohttp
    

Senden von Nachrichten an eine Warteschlange

Im folgenden Beispielcode wird das Senden einer Nachricht an eine Warteschlange veranschaulicht. Öffnen Sie einen Text-Editor, z. B. Visual Studio Code, erstellen Sie eine Datei send.py, und fügen Sie den folgenden Code hinzu.

  1. Fügen Sie import-Anweisungen hinzu:

    import asyncio
    from azure.servicebus.aio import ServiceBusClient
    from azure.servicebus import ServiceBusMessage
    from azure.identity.aio import DefaultAzureCredential
    
  2. Fügen Sie Konstanten hinzu, und definieren Sie Anmeldeinformationen:

    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    QUEUE_NAME = "QUEUE_NAME"
    
    credential = DefaultAzureCredential()
    

    Wichtig

    • Ersetzen Sie FULLY_QUALIFIED_NAMESPACE durch den vollqualifizierten Namespace für Ihren Service Bus-Namespace.
    • Ersetzen Sie QUEUE_NAME durch den Namen der Warteschlange.
  3. Fügen Sie eine Methode zum Senden einer einzelnen Nachricht hinzu:

    async def send_single_message(sender):
        # Create a Service Bus message and send it to the queue
        message = ServiceBusMessage("Single Message")
        await sender.send_messages(message)
        print("Sent a single message")
    

    Der Absender ist ein Objekt, das als Client für die von Ihnen erstellte Warteschlange fungiert. Sie erstellen es später und senden als Argument an diese Funktion.

  4. Fügen Sie eine Methode zum Senden einer Liste mit Nachrichten hinzu.

    async def send_a_list_of_messages(sender):
        # Create a list of messages and send it to the queue
        messages = [ServiceBusMessage("Message in list") for _ in range(5)]
        await sender.send_messages(messages)
        print("Sent a list of 5 messages")
    
  5. Fügen Sie eine Methode zum Senden eines Batchs mit Nachrichten hinzu:

    async def send_batch_message(sender):
        # Create a batch of messages
        async with sender:
            batch_message = await sender.create_message_batch()
            for _ in range(10):
                try:
                    # Add a message to the batch
                    batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch"))
                except ValueError:
                    # ServiceBusMessageBatch object reaches max_size.
                    # New ServiceBusMessageBatch object can be created here to send more data.
                    break
            # Send the batch of messages to the queue
            await sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. Erstellen Sie einen Service Bus-Client und dann ein Absenderobjekt für die Warteschlange, um Nachrichten senden zu können:

    async def run():
        # create a Service Bus client using the credential
        async with ServiceBusClient(
            fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
            credential=credential,
            logging_enable=True) as servicebus_client:
            # get a Queue Sender object to send messages to the queue
            sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME)
            async with sender:
                # send one message
                await send_single_message(sender)
                # send a list of messages
                await send_a_list_of_messages(sender)
                # send a batch of messages
                await send_batch_message(sender)
    
            # Close credential when no longer needed.
            await credential.close()
    
  7. Rufen Sie die run-Methode auf, und geben Sie eine Nachricht aus.

    asyncio.run(run())
    print("Done sending messages")
    print("-----------------------")
    

Empfangen von Nachrichten aus einer Warteschlange

Im folgenden Beispielcode wird das Empfangen von Nachrichten aus einer Warteschlange veranschaulicht. Mit dem gezeigten Code werden neue Nachrichten empfangen, bis fünf Sekunden lang (max_wait_time) keine neuen Nachrichten mehr empfangen werden.

Öffnen Sie einen Text-Editor, z. B. Visual Studio Code, erstellen Sie eine Datei recv.py, und fügen Sie ihr den folgenden Code hinzu.

  1. Ähnlich wie im Beispiel send.py fügen Sie import Anweisungen hinzu . Ersetzen Sie die Konstanten durch Ihre eigenen Werte und definieren Sie Zugangsdaten.

    import asyncio
    
    from azure.servicebus.aio import ServiceBusClient
    from azure.identity.aio import DefaultAzureCredential
    
    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    QUEUE_NAME = "QUEUE_NAME"
    
    credential = DefaultAzureCredential()
    
  2. Erstellen Sie einen Service Bus-Client und dann ein Empfängerobjekt für die Warteschlange, um Nachrichten empfangen zu können:

    async def run():
        # create a Service Bus client using the connection string
        async with ServiceBusClient(
            fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
            credential=credential,
            logging_enable=True) as servicebus_client:
    
            async with servicebus_client:
                # get the Queue Receiver object for the queue
                receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME)
                async with receiver:
                    received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20)
                    for msg in received_msgs:
                        print("Received: " + str(msg))
                        # complete the message so that the message is removed from the queue
                        await receiver.complete_message(msg)
    
            # Close credential when no longer needed.
            await credential.close()
    
  3. Rufen Sie die run-Methode auf.

    asyncio.run(run())
    

Ausführen der App

Öffnen Sie eine Eingabeaufforderung, die „Python“ im Pfad enthält, und führen Sie dann den Code aus, um Nachrichten aus der Warteschlange zu senden und zu empfangen.

python send.py; python recv.py

Die folgende Ausgabe wird angezeigt.

Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch

Navigieren Sie im Azure-Portal zu Ihrem Service Bus-Namespace. Vergewissern Sie sich auf der Seite Übersicht, dass die Anzahl für die eingehenden und ausgehenden Nachrichten „16“ beträgt. Wenn die Anzahl nicht angezeigt wird, warten Sie einige Minuten, und aktualisieren Sie die Seite.

Anzahl ein- und ausgehender Nachrichten

Wählen Sie auf der Seite Übersicht die Warteschlange aus, um zur Seite Service Bus-Warteschlange zu navigieren. Auf dieser Seite wird auch die Anzahl eingehender und ausgehender Nachrichten angezeigt. Darüber hinaus werden noch weitere Informationen wie etwa die aktuelle Größe der Warteschlange und die Anzahl aktiver Nachrichten angezeigt.

Warteschlangendetails

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