Schnellstart: Azure Queue Storage-Clientbibliothek für Python

Erste Schritte mit der Azure Queue Storage-Clientbibliothek für Python Azure Queue Storage ist ein Dienst zum Speichern einer großen Anzahl von Nachrichten, die später abgerufen und verarbeitet werden. Führen Sie die nachfolgenden Schritte aus, um das Paket zu installieren und den Beispielcode für grundlegende Aufgaben zu testen.

API-Referenzdokumentation | Quellcode der Bibliothek | Paket (Python Package Index) | Beispiele

Führen Sie mit der Azure Queue Storage-Clientbibliothek für Python die folgenden Aufgaben aus:

  • Erstellen einer Warteschlange
  • Hinzufügen von Nachrichten zu einer Warteschlange
  • Einsehen von Nachrichten in einer Warteschlange
  • Aktualisieren einer Nachricht in einer Warteschlange
  • Abrufen der Warteschlangenlänge
  • Empfangen von Nachrichten aus einer Warteschlange
  • Löschen von Nachrichten aus einer Warteschlange
  • Löschen einer Warteschlange

Voraussetzungen

Einrichten

In diesem Abschnitt wird beschrieben, wie Sie ein Projekt zur Arbeit mit der Azure Queue Storage-Clientbibliothek für Python vorbereiten.

Erstellen des Projekts

Erstellen Sie eine Python-Anwendung mit dem Namen queues-quickstart.

  1. Erstellen Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) ein neues Verzeichnis für das Projekt.

    mkdir queues-quickstart
    
  2. Wechseln Sie zum neu erstellten Verzeichnis queues-quickstart.

    cd queues-quickstart
    

Installieren der Pakete

Installieren Sie vom Projektverzeichnis aus mit dem Befehl pip install das Paket mit der Azure Queue Storage-Clientbibliothek für Python. Das azure-identity-Paket wird für kennwortlose Verbindungen mit Azure-Diensten benötigt.

pip install azure-storage-queue azure-identity

Einrichten des App-Frameworks

  1. Öffnen einer neuen Textdatei im Code-Editor

  2. Hinzufügen von import-Anweisungen

  3. Erstellen der Struktur für das Programm, einschließlich einer einfachen Ausnahmebehandlung

    Der Code lautet wie folgt:

    import os, uuid
    from azure.identity import DefaultAzureCredential
    from azure.storage.queue import QueueServiceClient, QueueClient, QueueMessage, BinaryBase64DecodePolicy, BinaryBase64EncodePolicy
    
    try:
        print("Azure Queue storage - Python quickstart sample")
        # Quickstart code goes here
    except Exception as ex:
        print('Exception:')
        print(ex)
    
    
  4. Speichern Sie die neue Datei als queues-quickstart.py im Verzeichnis queues-quickstart.

Für Azure authentifizieren

Anwendungsanforderungen an die meisten Azure-Dienste müssen autorisiert werden. Die Verwendung der von der Azure Identity-Clientbibliothek bereitgestellten Klasse DefaultAzureCredential ist der empfohlene Ansatz zum Implementieren von kennwortlosen Verbindungen mit Azure-Diensten in Ihrem Code.

Anforderungen an Azure-Dienste können auch direkt mithilfe von Kennwörtern, Verbindungszeichenfolgen oder anderen Anmeldeinformationen autorisiert werden. Dieser Ansatz sollte jedoch mit Vorsicht verwendet werden. Entwickler müssen darauf achten, dass diese Geheimnisse nicht an einem unsicheren Ort offengelegt werden. Jeder Benutzer, der Zugriff auf das Kennwort oder auf den geheimen Schlüssel erlangt, kann sich damit authentifizieren. DefaultAzureCredential bietet verbesserte Verwaltungs- und Sicherheitsvorteile gegenüber dem Kontoschlüssel, um kennwortlose Authentifizierung zu ermöglichen. Beide Optionen werden im folgenden Beispiel veranschaulicht.

DefaultAzureCredential ist eine Klasse, die von der Azure Identity-Clientbibliothek für Python bereitgestellt wird. Weitere Informationen zu DefaultAzureCredential finden Sie in der Übersicht über „DefaultAzureCredential“. DefaultAzureCredential unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche Methode zur Laufzeit verwendet werden soll. Bei diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (lokal gegenüber Produktion) verwenden, ohne umgebungsspezifischen Code zu implementieren.

Ihre App kann sich beispielsweise bei der lokalen Entwicklung mithilfe Ihrer Visual Studio Code-Anmeldeinformationen authentifizieren und dann eine verwaltete Identität verwenden, nachdem sie in Azure bereitgestellt wurde. Für diesen Übergang sind keine Änderungen am Code erforderlich.

Stellen Sie beim lokalen Entwickeln sicher, dass das Benutzerkonto, das auf Warteschlangendaten zugreift, die erforderlichen Berechtigungen hat. Sie benötigen die Berechtigung Mitwirkender an Storage-Warteschlangendaten zum Lesen und Schreiben von Warteschlangendaten. Um sich selbst diese Rolle zuweisen zu können, benötigen Sie die Rolle Benutzerzugriffsadministrator oder eine andere Rolle, die die Aktion Microsoft.Authorization/roleAssignments/write 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 auf der Seite Bereichsübersicht.

In diesem Szenario weisen Sie Ihrem Benutzerkonto Berechtigungen zu, die auf das Speicherkonto zugeschnitten sind, um dem Prinzip der geringsten Rechte zu folgen. Auf diese Weise erhalten Benutzer nur die erforderlichen Mindestberechtigungen, und es entstehen sicherere Produktionsumgebungen.

Im folgenden Beispiel wird Ihrem Benutzerkonto die Rolle Mitwirkender an Storage-Warteschlangendaten zugewiesen, die sowohl Lese- als auch Schreibzugriff auf Warteschlangendaten in Ihrem Speicherkonto ermöglicht.

Wichtig

In den meisten Fällen dauert es eine oder zwei Minute(n), bis die Rollenzuweisung in Azure weitergegeben wird. 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. Suchen Sie im Azure-Portal Ihr Speicherkonto mithilfe der Hauptsuchleiste oder der linken Navigationsleiste.

  2. Wählen Sie auf der Übersichtsseite des Speicherkontos im linken Menü die Option Zugriffssteuerung (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 aus dem dann angezeigten Dropdownmenü die Option Rollenzuweisung hinzufügen aus.

A screenshot showing how to assign a role.

  1. Über das Suchfeld können Sie die Ergebnisse für die gewünschte Rolle filtern. Suchen Sie in diesem Beispiel nach Mitwirkender an Storage-Warteschlangendaten, und wählen Sie das entsprechende Ergebnis und dann Weiter aus.

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

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

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

Objektmodell

Azure Queue Storage ist ein Dienst für die Speicherung großer Nachrichtenmengen. Eine Warteschlangennachricht kann bis zu 64 KB groß sein. Eine Warteschlange kann Millionen Nachrichten enthalten, bis die maximale Kapazität eines Speicherkontos erreicht ist. Warteschlangen werden häufig verwendet, um ein Arbeits-Backlog zur asynchronen Verarbeitung zu erstellen. Queue Storage bietet drei Arten von Ressourcen:

  • Speicherkonto:Alle Zugriffe auf den Azure-Speicher erfolgen über ein Speicherkonto. Weitere Informationen zu Speicherkonten finden Sie in der Speicherkontoübersicht
  • Warteschlange: Eine Warteschlange enthält einen Satz von Nachrichten. Alle Nachrichten müssen sich in Warteschlangen befinden. Beachten Sie, dass der Warteschlangenname nur aus Kleinbuchstaben bestehen darf. Informationen zum Benennen von Warteschlangen finden Sie unter Benennen von Warteschlangen und Metadaten.
  • Nachricht: Eine Nachricht in einem beliebigen Format und mit einer Größe von bis zu 64 KB. Eine Nachricht kann maximal 7 Tage in der Warteschlange verbleiben. Für Version 2017-07-29 oder höhere Versionen kann die maximale Gültigkeitsdauer eine beliebige positive Zahl sein. Mit -1 wird angegeben, dass die Nachricht nicht abläuft. Wird dieser Parameter ausgelassen, beträgt die Standardgültigkeitsdauer sieben Tage.

Im folgenden Diagramm ist die Beziehung zwischen diesen Ressourcen dargestellt.

Diagram of Queue storage architecture

Verwenden Sie die folgenden Python-Klassen zur Interaktion mit diesen Ressourcen:

  • QueueServiceClient: Mit dem QueueServiceClient können Sie alle Warteschlangen in Ihrem Speicherkonto verwalten.
  • QueueClient: Mit der QueueClient-Klasse können Sie eine einzelne Warteschlange und die darin enthaltenen Nachrichten verwalten und bearbeiten.
  • QueueMessage: Die QueueMessage-Klasse repräsentiert die einzelnen Objekte, die beim Aufrufen von receive_messages in einer Warteschlange zurückgegeben werden.

Codebeispiele

Diese Beispielcodeausschnitte zeigen Ihnen, wie folgende Aktionen mit der Azure Queue Storage-Clientbibliothek für Python ausgeführt werden:

Autorisieren des Zugriffs und Erstellen eines Clientobjekts

Vergewissern Sie sich, dass Sie mit dem Microsoft Entra-Konto authentifiziert sind, dem Sie die Rolle zugewiesen haben. Dann können Sie sich über die Azure-Befehlszeilenschnittstelle, Visual Studio Code oder Azure PowerShell authentifizieren.

Melden Sie sich mit dem folgenden Befehl über die Azure-Befehlszeilenschnittstelle bei Azure an:

az login

Nach der Authentifizierung können Sie ein QueueClient-Objekt erstellen und autorisieren, indem Sie mit DefaultAzureCredential auf Warteschlangendaten im Speicherkonto zugreifen. DefaultAzureCredential ermittelt und verwendet automatisch das Konto, mit dem Sie sich im vorherigen Schritt angemeldet haben.

Für die Autorisierung mit DefaultAzureCredential müssen Sie sicherstellen, dass Sie das Paket azure-identity wie unter Installieren der Pakete beschrieben hinzugefügt haben. Fügen Sie außerdem die folgende Importanweisung in die Datei queues-quickstart.py ein:

from azure.identity import DefaultAzureCredential

Legen Sie einen Namen für die Warteschlange fest, und erstellen Sie eine Instanz der QueueClient-Klasse mit DefaultAzureCredential für die Autorisierung. Sie verwenden dieses Clientobjekt, um die Warteschlangenressource im Speicherkonto zu erstellen und mit ihr zu interagieren.

Wichtig

Warteschlangennamen dürfen nur Kleinbuchstaben, Ziffern und Bindestriche enthalten und müssen mit einem Buchstaben oder einer Ziffer beginnen. Vor und nach jedem Bindestrich muss ein Zeichen stehen, das kein Bindestrich ist. Der Name muss außerdem zwischen 3 und 63 Zeichen lang sein. Weitere Informationen zum Benennen von Warteschlangen finden Sie unter Benennen von Warteschlangen und Metadaten.

Fügen Sie folgenden Code innerhalb der try-Methode hinzu, und ersetzen Sie den Wert des Platzhalters <storage-account-name>:

    print("Azure Queue storage - Python quickstart sample")

    # Create a unique name for the queue
    queue_name = "quickstartqueues-" + str(uuid.uuid4())

    account_url = "https://<storageaccountname>.queue.core.windows.net"
    default_credential = DefaultAzureCredential()

    # Create the QueueClient object
    # We'll use this object to create and interact with the queue
    queue_client = QueueClient(account_url, queue_name=queue_name ,credential=default_credential)

Warteschlangennachrichten werden als Text gespeichert. Wenn Sie Binärdaten speichern möchten, müssen Sie die Base64-Codierungs- und -Decodierungsfunktionen einrichten, bevor Sie eine Nachricht in die Warteschlange stellen.

Sie können die Base64-Codierungs- und -Decodierungsfunktionen beim Erstellen des Clientobjekts konfigurieren:

# Setup Base64 encoding and decoding functions
base64_queue_client = QueueClient.from_connection_string(
                            conn_str=connect_str, queue_name=q_name,
                            message_encode_policy = BinaryBase64EncodePolicy(),
                            message_decode_policy = BinaryBase64DecodePolicy()
                        )

Erstellen einer Warteschlange

Rufen Sie dann mithilfe des QueueClient-Objekts die create_queue-Methode auf, um die Warteschlange in Ihrem Speicherkonto zu erstellen.

Fügen Sie diesen Code am Ende des try-Blocks hinzu:

    print("Creating queue: " + queue_name)

    # Create the queue
    queue_client.create_queue()

Hinzufügen von Nachrichten zu einer Warteschlange

Der folgende Codeausschnitt fügt der Warteschlange durch Aufrufen der send_message-Methode Nachrichten hinzu. Außerdem speichert er die QueueMessage, die vom dritten send_message-Aufruf zurückgegeben wird. saved_message wird später im Programm zum Aktualisieren des Nachrichteninhalts verwendet.

Fügen Sie diesen Code am Ende des try-Blocks hinzu:

    print("\nAdding messages to the queue...")

    # Send several messages to the queue
    queue_client.send_message(u"First message")
    queue_client.send_message(u"Second message")
    saved_message = queue_client.send_message(u"Third message")

Einsehen von Nachrichten in einer Warteschlange

Durch Aufrufen der peek_messages-Methode können Sie die Nachrichten in der Warteschlange einsehen. Diese Methode ruft mindestens eine Nachricht vom Anfang der Warteschlange ab, ändert aber nicht die Sichtbarkeit der Nachricht.

Fügen Sie diesen Code am Ende des try-Blocks hinzu:

    print("\nPeek at the messages in the queue...")

    # Peek at messages in the queue
    peeked_messages = queue_client.peek_messages(max_messages=5)

    for peeked_message in peeked_messages:
        # Display the message
        print("Message: " + peeked_message.content)

Aktualisieren einer Nachricht in einer Warteschlange

Aktualisieren Sie den Inhalt einer Nachricht durch Aufrufen der update_message-Methode. Diese Methode kann das Sichtbarkeitstimeout und den Inhalt einer Nachricht ändern. Beim Nachrichteninhalt muss es sich um eine UTF-8-codierte Zeichenfolge handeln, die bis zu 64 KB groß sein darf. Übergeben Sie zusammen mit dem neuen Inhalt Werte aus der Nachricht, die weiter oben im Code gespeichert wurde. Die saved_message-Werte identifizieren die Nachricht, die aktualisiert werden soll.

    print("\nUpdating the third message in the queue...")

    # Update a message using the message saved when calling send_message earlier
    queue_client.update_message(saved_message, pop_receipt=saved_message.pop_receipt, \
        content="Third message has been updated")

Abrufen der Warteschlangenlänge

Sie können die Anzahl der Nachrichten in einer Warteschlange schätzen lassen.

Die Methode get_queue_properties gibt Warteschlangeneigenschaften zurück, einschließlich approximate_message_count.

properties = queue_client.get_queue_properties()
count = properties.approximate_message_count
print("Message count: " + str(count))

Das Ergebnis ist ein ungefährer Wert, da seit der Antwort des Diensts auf Ihre Anforderung möglicherweise bereits Nachrichten hinzugefügt oder gelöscht wurden.

Empfangen von Nachrichten aus einer Warteschlange

Sie können zuvor hinzugefügte Nachrichten herunterladen, in dem Sie die receive_messages-Methode aufrufen.

Fügen Sie diesen Code am Ende des try-Blocks hinzu:

    print("\nReceiving messages from the queue...")

    # Get messages from the queue
    messages = queue_client.receive_messages(max_messages=5)

Beim Aufrufen der receive_messages-Methode können Sie optional einen Wert für max_messages angeben, der die Anzahl der Nachrichten darstellt, die aus der Warteschlange abgerufen werden sollen. Der Standardwert ist „1 Nachricht“, und der Höchstwert ist „32 Nachrichten“. Sie können auch einen Wert für visibility_timeout angeben, wodurch die Nachrichten für den Timeoutzeitraum vor anderen Vorgängen ausgeblendet werden. Der Standardwert ist 30 Sekunden.

Löschen von Nachrichten aus einer Warteschlange

Löschen Sie Nachrichten aus einer Warteschlange, nachdem sie empfangen und verarbeitet wurden. In diesem Fall besteht die Verarbeitung nur darin, dass die Nachricht in der Konsole angezeigt wird.

Die App wird angehalten und wartet auf Benutzereingaben, indem input aufgerufen wird, bevor die Nachrichten verarbeitet und gelöscht werden. Überprüfen Sie im Azure-Portal, ob die Ressourcen ordnungsgemäß erstellt wurden, bevor sie gelöscht werden. Alle Nachrichten, die nicht explizit gelöscht werden, werden schlussendlich wieder in der Warteschlange angezeigt und ggf. erneut verarbeitet.

Fügen Sie diesen Code am Ende des try-Blocks hinzu:

    print("\nPress Enter key to 'process' messages and delete them from the queue...")
    input()

    for msg_batch in messages.by_page():
            for msg in msg_batch:
                # "Process" the message
                print(msg.content)
                # Let the service know we're finished with
                # the message and it can be safely deleted.
                queue_client.delete_message(msg)

Löschen einer Warteschlange

Der folgende Code bereinigt die von der App erstellten Ressourcen, indem die Warteschlange mithilfe der delete_queue-Methode gelöscht wird.

Fügen Sie diesen Code am Ende des try-Blocks hinzu, und speichern Sie die Datei:

    print("\nPress Enter key to delete the queue...")
    input()

    # Clean up
    print("Deleting queue...")
    queue_client.delete_queue()

    print("Done")

Ausführen des Codes

Diese App erstellt drei Nachrichten und fügt sie einer Azure-Warteschlange hinzu. Der Code listet die Nachrichten in der Warteschlange auf, ruft sie ab und löscht sie, bevor er letztendlich die Warteschlange löscht.

Navigieren Sie im Konsolenfenster zu dem Verzeichnis, das die Datei queues-quickstart.py enthält, und führen Sie dann die App mit dem folgenden python-Befehl aus.

python queues-quickstart.py

Die Ausgabe der App sieht etwa wie das folgende Beispiel aus:

Azure Queue Storage client library - Python quickstart sample
Creating queue: quickstartqueues-<UUID>

Adding messages to the queue...

Peek at the messages in the queue...
Message: First message
Message: Second message
Message: Third message

Updating the third message in the queue...

Receiving messages from the queue...

Press Enter key to 'process' messages and delete them from the queue...

First message
Second message
Third message has been updated

Press Enter key to delete the queue...

Deleting queue...
Done

Wenn die App vor dem Empfangen von Nachrichten angehalten wird, überprüfen Sie Ihr Speicherkonto im Azure-Portal. Überprüfen Sie, ob sich in der Warteschlange Nachrichten befinden.

Drücken Sie die Enter, um Nachrichten zu empfangen und zu löschen. Wenn Sie dazu aufgefordert werden, drücken Sie erneut die Enter, um die Warteschlange zu löschen und die Demo zu beenden.

Nächste Schritte

In dieser Schnellstartanleitung haben Sie gelernt, wie Sie mithilfe von Python-Code eine Warteschlange erstellen und dieser Nachrichten hinzufügen. Danach haben Sie erfahren, wie Sie Nachrichten einsehen, abrufen und löschen. Zum Schluss haben Sie gelernt, wie Sie eine Nachrichtenwarteschlange löschen.

Tutorials, Beispiele, Schnellstartanleitungen und weiteres Dokumentationsmaterial finden Sie hier: