Jak používat azure queue Storage z Pythonu

Přehled

Tento článek ukazuje běžné scénáře použití služby Azure Queue Storage service. Mezi zahrnuté scénáře patří vkládání, prohlížení, získávání a odstraňování zpráv ve frontě. Je také pokryt kód pro vytváření a odstraňování front.

Příklady v tomto článku jsou napsané v Pythonu a používají klientskou knihovnu Azure Queue Storage pro Python. Další informace o frontách najdete v části Další kroky.

Co je Queue Storage?

Azure Queue Storage je služba pro ukládání velkého počtu zpráv, ke které můžete získat přístup z jakéhokoli místa na světě prostřednictvím ověřených volání s využitím protokolu HTTP nebo HTTPS. Zpráva s jednou frontou může mít velikost až 64 kB a jedna fronta můžete obsahovat miliony zpráv, až do dosažení celkové kapacity účtu úložiště. Fronta úložiště se často používá k vytvoření nevyřízených položek pro asynchronní zpracování.

Služba front koncepty

Služba front Azure obsahuje následující komponenty:

Součásti Azure Služba front

  • Účet úložiště: Veškerý přístup ke službě Azure Storage se provádí prostřednictvím účtu úložiště. Další informace o účtech úložiště najdete v tématu Přehled účtu úložiště.

  • Fronta: Fronta obsahuje sadu zpráv. Všechny zprávy musí být ve frontě. Upozorňujeme, že název fronty musí být psaný malými písmeny. Informace o pojmenování front najdete v tématu Pojmenování front a metadata.

  • Zpráva: Zprávu v libovolném formátu o velikosti až 64 kB. Maximální doba, po kterou může zpráva zůstat ve frontě, je 7 dní. V případě verze 2017-07-29 nebo novější může být maximální doba do živého kladného čísla nebo-1, což znamená, že platnost zprávy nevyprší. Pokud je tento parametr vynechán, výchozí hodnota TTL (Time to Live) je sedm dní.

  • Formát adresy URL: Fronty jsou adresovatelné v následujícím formátu adresy URL: http:// <storage account> . Queue.Core.Windows.NET/<queue>

    Následující adresa URL odkazuje na frontu v diagramu:

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

Vytvoření účtu úložiště Azure

Nejjednodušší způsob, jak vytvořit první účet úložiště Azure, je pomocí Azure Portal. Další informace najdete v tématu Vytvoření účtu úložiště.

Účet úložiště Azure můžete vytvořit také pomocí prostředí Azure PowerShell, rozhraní příkazového řádku Azure nebo pomocí poskytovatele prostředků služby Azure Storage pro .NET.

Pokud nechcete v Azure v tuto chvíli vytvářet účet úložiště, můžete použít taky emulátor úložiště Azurite ke spuštění a testování kódu v místním prostředí. Další informace najdete v tématu použití emulátoru Azurite pro vývoj místních Azure Storage.

Stáhnout a nainstalovat sadu SDK služby Azure Storage pro Python

Sada Azure Storage SDK pro Python vyžaduje Python verze 2.7, v3.3 nebo novější.

Instalace přes PyPI

Pokud chcete aplikaci nainstalovat přes PyPI (Python Package Index), zadejte:

pip install azure-storage-queue

Poznámka

Pokud upgradujete ze sady Azure Storage SDK pro Python verze 0.36 nebo starší, před instalací nejnovějšího balíčku odinstalujte starší sadu SDK pomocí pip uninstall azure-storage .

Alternativní metody instalace najdete v tématu Azure SDK pro Python.

Zkopírování přihlašovacích údajů z webu Azure Portal

Když ukázková aplikace vytvoří požadavek na Azure Storage, musí být autorizována. Pokud chcete požadavek autorizovat, přidejte do aplikace přihlašovací údaje svého účtu úložiště jako připojovací řetězec. Pokud chcete zobrazit přihlašovací údaje účtu úložiště, postupujte takto:

  1. Přihlaste se k webu Azure Portal.

  2. Vyhledejte svůj účet úložiště.

  3. V podokně nabídek účtu úložiště v části Zabezpečení a sítě vyberte Přístupové klíče. Tady můžete zobrazit přístupové klíče účtu a úplný připojovací řetězec pro každý klíč.

    Snímek obrazovky znázorňuje, kde se nachází nastavení přístupového klíče v Azure Portal

  4. V podokně Přístupové klíče vyberte Zobrazit klíče.

  5. V části key1 vyhledejte hodnotu Připojovací řetězec. Vyberte ikonu Zkopírovat do schránky a zkopírujte připojovací řetězec. Hodnotu připojovacího řetězce přidáte do proměnné prostředí v další části.

    Snímek obrazovky ukazující zkopírování připojovacího řetězce z webu Azure Portal

Konfigurace připojovacího řetězce úložiště

Po zkopírování připojovacího řetězce ho zapište do nové proměnné prostředí na místním počítači, na který běží aplikace. Proměnnou prostředí nastavíte tak, že otevřete okno konzoly a budete postupovat podle pokynů pro váš operační systém. Nahraďte <yourconnectionstring> skutečným připojovacím řetězcem.

Windows

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Po přidání proměnné prostředí v Windows, je nutné spustit novou instanci příkazového okna.

Linux

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

macOS

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

Restartování programů

Po přidání proměnné prostředí restartujte všechny spuštěné programy, které budou muset proměnnou prostředí přečíst. Před pokračováním například restartujte vývojové prostředí nebo editor.

Konfigurace aplikace pro přístup k frontě Storage

Objekt QueueClient umožňuje pracovat s frontou. Do horní části libovolného souboru Pythonu, ve kterém chcete programově přistupovat k frontě Azure, přidejte následující kód:

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

import os, uuid

Balíček os poskytuje podporu pro načtení proměnné prostředí. Balíček uuid poskytuje podporu generování jedinečného identifikátoru pro název fronty.

Vytvoření fronty

Připojovací řetězec se načte z proměnné AZURE_STORAGE_CONNECTION_STRING prostředí nastavené dříve.

Následující kód vytvoří objekt QueueClient pomocí připojovacího řetězce úložiště.

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

Zprávy fronty Azure se ukládají jako text. Pokud chcete ukládat binární data, na nastavení funkcí kódování a dekódování Base64 před vložením zprávy do fronty.

Při vytváření objektu klienta nakonfigurujte funkce kódování a dekódování Base64.

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

Vložení zprávy do fronty

Pokud chcete vložit zprávu do fronty, použijte send_message metodu .

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

Prohlížení zpráv

Můžete se podívat na zprávy, aniž byste je odebírali z fronty voláním peek_messages metody . Ve výchozím nastavení tato metoda zobrazí náhled jedné zprávy.

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

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

Změna obsahu zpráv zařazených ve frontě

Podle potřeby můžete změnit obsah zprávy přímo ve frontě. Pokud zpráva představuje úkol, můžete pomocí této funkce aktualizovat stav úlohy.

Následující kód používá update_message metodu k aktualizaci zprávy. Časový limit viditelnosti je nastavený na hodnotu 0, což znamená, že se zpráva zobrazí okamžitě a obsah se aktualizuje.

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)

Získání délky fronty

Podle potřeby můžete získat odhadovaný počet zpráv ve frontě.

Metoda get_queue_properties vrací vlastnosti fronty včetně approximate_message_count .

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

Výsledek je pouze přibližný, protože zprávy je možné přidat nebo odebrat poté, co služba odpoví na váš požadavek.

Zprávy o vynětu z fronty

Ve dvou krocích odeberte zprávu z fronty. Pokud se vašemu kódu nepodaří zprávu zpracovat, tento dvoukrokový proces zajistí, že dostanete stejnou zprávu a zkusíte to znovu. Po delete_message úspěšném zpracování zprávy zavolejte .

Při volání receive_messagesse ve výchozím nastavení zobrazí další zpráva ve frontě. Zpráva vrácená z se receive_messages stane neviditelnou pro jakýkoli jiný kód, který čte zprávy z této fronty. Ve výchozím nastavení tato zpráva zůstává neviditelná po dobu 30 sekund. Pokud chcete dokončit odebrání zprávy z fronty, musíte také zavolat delete_message.

messages = queue_client.receive_messages()

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

Načítání zpráv z fronty si můžete přizpůsobit dvěma způsoby. Za prvé si můžete načíst dávku zpráv (až 32). Za druhé si můžete nastavit delší nebo kratší časový limit neviditelnosti, aby měl váš kód více nebo méně času na úplné zpracování jednotlivých zpráv.

Následující příklad kódu používá receive_messages metodu k získání zpráv v dávkách. Potom zpracuje každou zprávu v rámci každé dávky pomocí vnořené for smyčky. Také se pro každou zprávu nastaví časový limit neviditelnosti 5 minut.

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)

Odstranění fronty

Pokud chcete odstranit frontu a všechny zprávy, které obsahuje, zavolejte delete_queue metodu .

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

Tip

Vyzkoušení Microsoft Azure Storage Exploreru

Microsoft Azure Storage Explorer je bezplatná samostatná aplikace od Microsoftu, která umožňuje vizuálně pracovat s daty Azure Storage ve Windows, macOS a Linuxu.

Další kroky

Teď, když jste se naučili základy fronty, Storage další informace najdete na těchto odkazech.