Verwenden von Azure Queue Storage mit Python

Übersicht

In diesem Artikel werden häufige Szenarien für die Verwendung des Azure Queue Storage-Diensts veranschaulicht. Die erläuterten Szenarien umfassen das Einfügen, Einsehen, Abrufen und Löschen von Warteschlangennachrichten. Der Code für das 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 der Warteschlangenspeicher?

Die Warteschlangenspeicherung in Azure ist ein Dienst zur Speicherung großer Anzahlen von Nachrichten, auf die von überall auf der Welt mit authentifizierten Anrufen über HTTP oder HTTPS zugegriffen werden kann. Eine einzelne Warteschlangennachricht kann bis zu 64 KB groß sein, und eine Warteschlange kann Millionen von Nachrichten enthalten. Deren Anzahl ist nur durch die Kapazität des Speicherkontos begrenzt. Warteschlangenspeicher wird häufig verwendet, um ein Arbeits-Backlog zur asynchronen Verarbeitung zu erstellen.

Konzepte des Warteschlangendiensts

Der Azure-Warteschlangendienst umfasst die folgenden Komponenten:

Azure-Warteschlangendienst – Komponenten

  • 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 sieben 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.

  • URL-Format: Warteschlangen sind über das folgende URL-Format adressierbar: http://<storage account>.queue.core.windows.net/<queue>

    Mit der folgenden URL kann eine der Warteschlangen im Diagramm adressiert werden:

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

Erstellen eines Azure-Speicherkontos

Ihr erstes Azure-Speicherkonto erstellen Sie am einfachsten im Azure-Portal. Weitere Informationen finden Sie unter Erstellen von Speicherkonten.

Ein Azure-Speicherkonto können Sie auch mit Azure PowerShell, der Azure-Befehlszeilenschnittstelle oder dem Azure Storage-Ressourcenanbieter für .NET erstellen.

Wenn Sie zu diesem Zeitpunkt kein Speicherkonto in Azure erstellen möchten, können Sie auch den Azurite-Speicheremulator zum Ausführen und Testen Ihres Codes in einer lokalen Umgebung verwenden. Weitere Informationen finden Sie unter Verwenden des Azurite-Emulators für lokale Azure Storage-Entwicklung.

Herunterladen und Installieren des Azure Storage SDKs für Python

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

Installieren über PyPI

Geben Sie für die Installation über Python Package Index (PyPI) folgenden Befehl ein:

pip install azure-storage-queue

Hinweis

Wenn Sie ein Upgrade aus dem Azure Storage SDK für Python v0.36 oder früher vornehmen, deinstallieren Sie das ältere SDK mit pip uninstall azure-storage, bevor Sie das neueste Paket installieren.

Informationen zu alternativen 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 Speicherkonto-Menübereich unter Sicherheit + Netzwerkbetrieb die Option Zugriffsschlüssel 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 Zugriffsschlüsseleinstellungen im Azure-Portal befinden.

  4. Wählen Sie im Bereich Zugriffsschlüssel die Option Schlüssel anzeigen aus.

  5. Suchen Sie im Abschnitt key1 nach dem Wert Verbindungszeichenfolge. Wählen Sie das Symbol In Zwischenablage kopieren zum Kopieren der Verbindungszeichenfolge aus. Im nächsten Abschnitt fügen Sie den Wert der Verbindungszeichenfolge in eine Umgebungsvariable ein.

    Screenshot: Kopieren einer Verbindungszeichenfolge aus dem Azure-Portal

Konfigurieren der 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 Ihrer Anwendung für den Zugriff auf den Warteschlangenspeicher

Das QueueClient-Objekt ermöglicht Ihnen die Arbeit mit Warteschlangen. Fügen Sie am Anfang jeder Python-Datei, in der Sie programmgesteuert auf eine Azure-Warteschlange zugreifen möchten, folgenden Code ein:

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

import os, uuid

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

Erstellen einer Warteschlange

Die Verbindungszeichenfolge wird aus der zuvor festgelegten Umgebungsvariable AZURE_STORAGE_CONNECTION_STRING abgerufen.

Der folgende Code erstellt mithilfe der Verbindungszeichenfolge für den Speicher ein QueueClient-Objekt.

# 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 die Funktionen für die Base64-Codierung und -Decodierung ein, bevor Sie eine Nachricht in die Warteschlange stellen.

Konfigurieren Sie die Funktionen für die Base64-Codierung und -Decodierung, wenn Sie das Clientobjekt erstellen.

# 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

Verwenden Sie zum Einfügen einer Nachricht in eine Warteschlange die Methode send_message.

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

Einsehen von Nachrichten

Sie können Nachrichten einsehen, ohne sie aus der Warteschlange zu entfernen. Rufen Sie dazu die Methode peek_messages auf. Standardmäßig wird von dieser Methode jeweils nur eine Nachricht angeschaut.

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

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

Ändern des Inhalts von Nachrichten in der Warteschlange

Sie können den Inhalt einer Nachricht vor Ort in der Warteschlange ändern. Wenn die Nachricht einen Task repräsentiert, können Sie dieses Feature verwenden, um den Status des Tasks zu aktualisieren.

Im folgenden Codebeispiel wird die Methode update_message verwendet, um eine Nachricht zu aktualisieren. Das Sichtbarkeitstimeout 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)

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

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

Entfernen von Nachrichten aus Warteschlangen

Das Entfernen einer Nachricht aus einer Warteschlange erfolgt in zwei Stufen. Wenn Ihr Code eine Nachricht nicht verarbeiten kann, stellt dieser zweistufige Prozess sicher, dass Sie dieselbe Nachricht erneut erhalten und den Vorgang erneut ausführen können. Rufen Sie nach der erfolgreichen Verarbeitung der Nachricht delete_message auf.

Wenn Sie receive_messages aufrufen, wird standardmäßig die nächste Nachricht in der Warteschlange abgerufen. Die für receive_messages zurückgegebene Nachricht ist für anderen Code, mit dem Nachrichten aus dieser Warteschlange gelesen werden, nicht mehr sichtbar. Standardmäßig bleibt die Nachricht 30 Sekunden lang unsichtbar. Um die Nachricht endgültig aus der Warteschlange zu entfernen, müssen Sie außerdem 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, wie Sie das Abrufen von Nachrichten aus der Warteschlange anpassen können. Erstens können Sie einen Nachrichtenstapel abrufen (bis zu 32). Zweitens können Sie das Unsichtbarkeits-Zeitlimit verkürzen oder verlängern, sodass der Code mehr oder weniger Zeit zur vollständigen Verarbeitung jeder Nachricht benötigt.

Im folgenden Codebeispiel wird die Methode receive_messages verwendet, um Nachrichten in Batches abzurufen. Danach wird jede Nachricht in jedem Batch mithilfe einer geschachtelten for-Schleife verarbeitet. Außerdem wird das Unsichtbarkeits-Zeitlimit auf fünf Minuten pro Nachricht 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)

Löschen einer Warteschlange

Zum Löschen einer Warteschlange und aller darin enthaltenen Nachrichten rufen Sie die Methode delete_queue auf.

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

Tipp

Testen des Microsoft Azure Storage-Explorers

Beim Microsoft Azure Storage-Explorer handelt es sich um eine kostenlose eigenständige App von Microsoft, über die Sie ganz einfach visuell mit Azure Storage-Daten arbeiten können – unter Windows, MacOS und Linux.

Nächste Schritte

Nachdem Sie sich nun mit den Grundlagen von Queue Storage vertraut gemacht haben, lesen Sie die folgenden Artikel, um mehr zu erfahren.

Verwandte Codebeispiele, in denen veraltete Python Version 2 SDKs verwendet werden, finden Sie unter Codebeispiele mit der Python Version 2.