Freigeben über


So verwenden Sie Azure Queue Storage mit Python

Überblick

In diesem Artikel werden allgemeine Szenarien mit dem Azure Queue Storage-Dienst veranschaulicht. Die behandelten Szenarien umfassen das Einfügen, Einsehen, Abrufen und Löschen von Warteschlangennachrichten. Code zum Erstellen und Löschen von Warteschlangen wird ebenfalls behandelt.

Die Beispiele in diesem Artikel sind in Python geschrieben und verwenden die Azure Queue Storage-Clientbibliothek für Python. Weitere Informationen zu Warteschlangen finden Sie im Abschnitt "Nächste Schritte ".

Was ist Queue-Speicher?

Azure Queue Storage ist ein Dienst zum Speichern großer Anzahl von Nachrichten, auf die von überall auf der Welt über authentifizierte Anrufe mit HTTP oder HTTPS zugegriffen werden kann. Eine einzelne Warteschlangennachricht kann bis zu 64 KB groß sein, und eine Warteschlange kann Millionen von Nachrichten bis zum Gesamtkapazitätslimit eines Speicherkontos enthalten. Der Warteschlangenspeicher wird häufig verwendet, um einen Arbeitsbestand zu erstellen, der asynchron verarbeitet werden kann.

Konzepte des Warteschlangendienstes

Der Azure-Warteschlangendienst enthält die folgenden Komponenten:

Azure Queue-Dienstkomponenten

  • Speicherkonto: Der gesamte Zugriff auf Azure Storage erfolgt über ein Speicherkonto. Weitere Informationen zu Speicherkonten finden Sie unter Übersicht über das Speicherkonto.

  • Schlange: Eine Warteschlange enthält eine Reihe von Nachrichten. Alle Nachrichten müssen sich in einer Warteschlange befinden. Beachten Sie, dass der Warteschlangenname nur aus Kleinbuchstaben bestehen darf. Informationen zu Benennungswarteschlangen finden Sie unter Benennen von Warteschlangen und Metadaten.

  • Nachricht: Eine Nachricht in beliebigem Format von bis zu 64 KB. Die maximale Zeit, die eine Nachricht in der Warteschlange verbleiben kann, beträgt 7 Tage. 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.

  • URL-Format: Warteschlangen können mithilfe des folgenden URL-Formats adressiert werden: http://<storage account>.queue.core.windows.net/<queue>

    Die folgende URL behebt eine Warteschlange im Diagramm:

    http://myaccount.queue.core.windows.net/incoming-orders

Erstellen eines Azure-Speicherkontos

Die einfachste Möglichkeit zum Erstellen Ihres ersten Azure-Speicherkontos ist die Verwendung des Azure-Portals. Weitere Informationen finden Sie unter Erstellen eines Speicherkontos.

Sie können auch ein Azure-Speicherkonto erstellen, indem Sie Azure PowerShell, Azure CLI oder den Azure Storage-Ressourcenanbieter für .NET verwenden.

Wenn Sie derzeit kein Speicherkonto in Azure erstellen möchten, können Sie auch den Azurite-Speicheremulator verwenden, um Ihren Code in einer lokalen Umgebung auszuführen und zu testen. Weitere Informationen finden Sie unter Verwenden des Azurite-Emulators für die lokale Azure Storage-Entwicklung.

Herunterladen und Installieren des Azure Storage SDK für Python

Das Azure Storage SDK für Python erfordert Python v2.7, v3.3 oder höher.

Installieren über PyPI

Um die Installation über den Python-Paketindex (PyPI) durchzuführen, geben Sie Folgendes ein:

pip install azure-storage-queue

Hinweis

Wenn Sie ein Upgrade vom Azure Storage SDK für Python v0.36 oder einer früheren Version durchführen, deinstallieren Sie das ältere SDK mit pip uninstall azure-storage, bevor Sie das neueste Paket installieren.

Alternative Installationsmethoden finden Sie unter Azure SDK für Python.

Kopieren Ihrer Anmeldeinformationen aus dem Azure-Portal

Wenn die Beispielanwendung eine Anforderung an Azure Storage sendet, muss diese autorisiert werden. Fügen Sie zum Autorisieren einer Anforderung die Anmeldeinformationen für Ihr Speicherkonto in Form einer Verbindungszeichenfolge hinzu. Führen Sie zum Anzeigen der Anmeldeinformationen Ihres Speicherkontos die folgenden Schritte aus:

  1. Melden Sie sich beim Azure-Portal an.

  2. Suchen Sie nach Ihrem Speicherkonto.

  3. Wählen Sie im Menübereich "Speicherkonto" unter "Sicherheit + Netzwerk" die Option "Zugriffstasten" aus. Hier können Sie die Kontozugriffsschlüssel und die vollständige Verbindungszeichenfolge für jeden Schlüssel anzeigen.

    Screenshot, der zeigt, wo sich die Zugriffstasteneinstellungen im Azure-Portal befinden

  4. Wählen Sie im Bereich "Zugriffstasten " die Option "Tasten anzeigen" aus.

  5. Suchen Sie im Abschnitt "key1" den Wert der Verbindungszeichenfolge. Wählen Sie das Symbol "In Zwischenablage kopieren" aus, um die Verbindungszeichenfolge zu kopieren. Im nächsten Abschnitt fügen Sie den Wert der Verbindungszeichenfolge in eine Umgebungsvariable ein.

    Screenshot, der zeigt, wie eine Verbindungszeichenfolge aus dem Azure-Portal kopiert wird

Konfigurieren Sie Ihre Speicherverbindungszeichenfolge

Schreiben Sie die Verbindungszeichenfolge nach dem Kopieren in eine neue Umgebungsvariable auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird. Öffnen Sie zum Festlegen der Umgebungsvariablen ein Konsolenfenster, und befolgen Sie die Anleitung für Ihr Betriebssystem. Ersetzen Sie <yourconnectionstring> durch Ihre Verbindungszeichenfolge.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Sie müssen nach dem Hinzufügen der Umgebungsvariablen unter Windows eine neue Instanz des Befehlsfensters öffnen.

Neustarten von Programmen

Nachdem Sie die Umgebungsvariable hinzugefügt haben, starten Sie alle ausgeführten Programme neu, in denen die Umgebungsvariable gelesen werden muss. Starten Sie beispielsweise die Entwicklungsumgebung oder den Editor neu, bevor Sie fortfahren.

Konfigurieren Sie Ihre Anwendung für den Zugriff auf Warteschlangenspeicher

Mit dem QueueClient-Objekt können Sie mit einer Warteschlange arbeiten. Fügen Sie oben in jeder Python-Datei, in der Sie programmgesteuert auf eine Azure-Warteschlange zugreifen möchten, den folgenden Code hinzu:

from azure.storage.queue import (
        QueueClient,
        BinaryBase64EncodePolicy,
        BinaryBase64DecodePolicy
)

import os, uuid

Das os-Paket bietet Unterstützung zum Abrufen einer Umgebungsvariable. Das uuid-Paket bietet Unterstützung für das Generieren eines eindeutigen Bezeichners für einen Warteschlangennamen.

Warteschlange erstellen

Die Verbindungszeichenfolge wird aus der zuvor gesetzten AZURE_STORAGE_CONNECTION_STRING-Umgebungsvariable abgerufen.

Der folgende Code erstellt ein QueueClient-Objekt mithilfe der Speicherverbindungszeichenfolge.

# Retrieve the connection string from an environment
# variable named AZURE_STORAGE_CONNECTION_STRING
connect_str = os.getenv("AZURE_STORAGE_CONNECTION_STRING")

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

# Instantiate a QueueClient object which will
# be used to create and manipulate the queue
print("Creating queue: " + q_name)
queue_client = QueueClient.from_connection_string(connect_str, q_name)

# Create the queue
queue_client.create_queue()

Azure-Warteschlangennachrichten werden als Text gespeichert. Wenn Sie Binärdaten speichern möchten, richten Sie Base64-Codierungs- und Decodierungsfunktionen ein, bevor Sie eine Nachricht in die Warteschlange einfügen.

Konfigurieren Sie base64-Codierungs- und Decodierungsfunktionen beim Erstellen des Clientobjekts.

# 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()
                        )

Einfügen einer Nachricht in eine Warteschlange

Um eine Nachricht in eine Warteschlange einzufügen, verwenden Sie die send_message-Methode.

message = u"Hello World"
print("Adding message: " + message)
queue_client.send_message(message)

Nachrichten ansehen

Sie können Nachrichten anzeigen, ohne sie aus der Warteschlange zu entfernen, indem Sie die peek_messages-Methode aufrufen. Standardmäßig wird mit dieser Methode eine einzelne Nachricht angezeigt.

# Peek at the first message
messages = queue_client.peek_messages()

for peeked_message in messages:
    print("Peeked message: " + peeked_message.content)

Ändern des Inhalts einer in die Warteschlange eingereihten Nachricht

Sie können den Inhalt einer Nachricht direkt in der Warteschlange ändern. Wenn die Nachricht eine Aufgabe darstellt, können Sie dieses Feature verwenden, um den Status der Aufgabe zu aktualisieren.

Der folgende Code verwendet die update_message-Methode, um eine Nachricht zu aktualisieren. Das Timeout für die Sichtbarkeit ist auf 0 festgelegt, d. h. die Nachricht wird sofort angezeigt, und der Inhalt wird aktualisiert.

messages = queue_client.receive_messages()
list_result = next(messages)

message = queue_client.update_message(
        list_result.id, list_result.pop_receipt,
        visibility_timeout=0, content=u'Hello World Again')

print("Updated message to: " + message.content)

Warteschlangenlänge abrufen

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

Die get_queue_properties-Methode gibt Warteschlangeneigenschaften einschließlich der approximate_message_count.

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

Das Ergebnis ist nur ungefähr, da Nachrichten hinzugefügt oder entfernt werden können, nachdem der Dienst auf Ihre Anfrage geantwortet hat.

Nachrichten aus der Warteschlange entfernen

Entfernen sie eine Nachricht aus einer Warteschlange in zwei Schritten. Wenn ihr Code eine Nachricht nicht verarbeitet, stellt dieser zweistufige Prozess sicher, dass Sie dieselbe Nachricht abrufen und es erneut versuchen können. Rufen Sie delete_message auf, nachdem die Nachricht erfolgreich verarbeitet wurde.

Wenn Sie receive_messages anrufen, wird standardmäßig die nächste Nachricht in der Warteschlange angezeigt. Eine von receive_messages zurückgegebene Nachricht wird für alle anderen Codelesenachrichten aus dieser Warteschlange unsichtbar. Diese Nachricht bleibt standardmäßig 30 Sekunden lang unsichtbar. Um das Entfernen der Nachricht aus der Warteschlange abzuschließen, müssen Sie auch delete_message aufrufen.

messages = queue_client.receive_messages()

for message in messages:
    print("Dequeueing message: " + message.content)
    queue_client.delete_message(message.id, message.pop_receipt)

Es gibt zwei Möglichkeiten zum Anpassen des Nachrichtenabrufs aus einer Warteschlange. Zunächst können Sie eine Reihe von Nachrichten (bis zu 32) abrufen. Zweitens können Sie ein längeres oder kürzeres Unsichtbarkeit-Timeout festlegen, damit Ihr Code mehr oder weniger Zeit hat, jede Nachricht vollständig zu verarbeiten.

Im folgenden Codebeispiel wird die receive_messages-Methode verwendet, um Nachrichten in Batches abzurufen. Anschließend wird jede Nachricht in jedem Batch mithilfe einer geschachtelten for-Schleife verarbeitet. Außerdem wird für jede Nachricht das Timeout für die Unsichtbarkeit auf fünf Minuten festgelegt.

messages = queue_client.receive_messages(messages_per_page=5, visibility_timeout=5*60)

for msg_batch in messages.by_page():
   for msg in msg_batch:
      print("Batch dequeue message: " + msg.content)
      queue_client.delete_message(msg)

Eine Warteschlange löschen

Rufen Sie die delete_queue-Methode auf, um eine Warteschlange und alle darin enthaltenen Nachrichten zu löschen.

print("Deleting queue: " + queue_client.queue_name)
queue_client.delete_queue()

Tipp

Testen Sie den Microsoft Azure Storage-Explorer

Microsoft Azure Storage Explorer ist eine kostenlose, eigenständige App von Microsoft, mit der Sie visuell mit Azure Storage-Daten unter Windows, macOS und Linux arbeiten können.

Nächste Schritte

Nachdem Sie nun die Grundlagen des Warteschlangenspeichers kennengelernt haben, folgen Sie diesen Links, um mehr zu erfahren.

Verwandte Codebeispiele mit veralteten Python Version 2-SDKs finden Sie unter Codebeispiele mit Python Version 2.