Så här använder du Azure Queue Storage från Python

Översikt

Den här artikeln visar vanliga scenarier med hjälp av Azure Queue Storage-tjänsten. De scenarier som beskrivs omfattar infogning, granskning, borttagning och borttagning av kömeddelanden. Kod för att skapa och ta bort köer beskrivs också.

Exemplen i den här artikeln är skrivna i Python och använder Azure Queue Storage-klientbiblioteket för Python. Mer information om köer finns i avsnittet Nästa steg .

Vad är Queue Storage?

Azure Queue Storage är en tjänst för att lagra stora mängder meddelanden som kan nås från var som helst i världen via autentiserade anrop med HTTP eller HTTPS. Ett enda kömeddelande kan vara upp till 64 KB stort och en kö kan innehålla miljontals meddelanden, upp till den totala kapacitetsgränsen för ett lagringskonto. Queue Storage används ofta för att skapa en kvarvarande arbetslogg för att bearbeta asynkront.

Begrepp för kötjänst

Azure Queue-tjänsten innehåller följande komponenter:

Azure Queue-tjänstkomponenter

  • Lagringskonto: All åtkomst till Azure Storage görs genom ett lagringskonto. Mer information om lagringskonton finns i Översikt över lagringskonto.

  • Kö: en kö innehåller en uppsättning meddelanden. Alla meddelanden måste vara i en kö. Observera att könamnet måste vara helt i gemener. Mer information om namngivning av köer finns i namngivning av köer och metadata.

  • Meddelande: ett meddelande i valfritt format, som är upp till 64 KB. Den maximala tid som ett meddelande kan finnas i kön är 7 dagar. För version 2017-07-29 eller senare kan den maximala tidsgränsen vara ett positivt tal, eller -1 som anger att meddelandet inte upphör att gälla. Om den här parametern utelämnas är standardvärdet time to live sju dagar.

  • URL-format: Köer kan adresseras med följande URL-format: http://<storage account>.queue.core.windows.net/<queue>

    Följande URL adresserar en kö i diagrammet:

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

Skapa ett Azure Storage-konto

Det enklaste sättet att skapa ditt första Azure-lagringskonto är att använda Azure Portal. Läs mer i Skapa ett lagringskonto.

Du kan också skapa ett Azure Storage-konto med Azure PowerShell, Azure CLI eller Azure Storage-resursprovidern för .NET.

Om du föredrar att inte skapa ett lagringskonto i Azure just nu kan du också använda Azurite Storage-emulatorn för att köra och testa koden i en lokal miljö. Mer information finns i Använda Azurite-emulatorn för lokal Azure Storage-utveckling.

Ladda ned och installera Azure Storage SDK för Python

Azure Storage SDK för Python kräver Python v2.7, v3.3 eller senare.

Installera via PyPI

Om du vill installera via Python Package Index (PyPI) skriver du:

pip install azure-storage-queue

Anteckning

Om du uppgraderar från Azure Storage SDK för Python v0.36 eller tidigare avinstallerar du den äldre SDK:t med pip uninstall azure-storage innan du installerar det senaste paketet.

Alternativa installationsmetoder finns i Azure SDK för Python.

Kopiera dina autentiseringsuppgifter från Azure-portalen

När exempelprogrammet skickar en begäran till Azure Storage måste det auktoriseras. Om du vill auktorisera en begäran lägger du till dina autentiseringsuppgifter för lagringskontot i programmet som en anslutningssträng. Följ dessa steg om du vill visa dina autentiseringsuppgifter för lagringskontot:

  1. Logga in på Azure-portalen.

  2. Leta rätt på ditt lagringskonto.

  3. I menyfönstret för lagringskontot går du till Säkerhet + nätverk och väljer Åtkomstnycklar. Här kan du visa kontoåtkomstnycklarna och den fullständiga anslutningssträngen för varje nyckel.

    Skärmbild som visar var inställningarna för åtkomstnyckeln finns i Azure Portal

  4. I fönstret Åtkomstnycklar väljer du Visa nycklar.

  5. Leta upp värdet för Anslutningssträng i avsnittet key1. Välj ikonen Kopiera till Urklipp för att kopiera anslutningssträngen. Du lägger till värdet för anslutningssträngen i en miljövariabel i nästa avsnitt.

    Skärmbild som visar hur man kopierar en anslutningssträng från Azure-portalen

Konfigurera anslutningssträngen för lagring

När du har kopierat anslutningssträngen skriver du den till en ny miljövariabel på den lokala datorn som kör programmet. Konfigurera miljövariabeln genom att öppna ett konsolfönster och följa anvisningarna för ditt operativsystem. Ersätt <yourconnectionstring> med den faktiska anslutningssträngen.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

När du har lagt till miljövariabeln i Windows måste du starta en ny instans av kommandofönstret.

Starta om program

När du har lagt till miljövariabeln startar du om alla program som körs och som behöver läsa miljövariabeln. Starta till exempel om utvecklingsmiljön eller redigeringsprogrammet innan du fortsätter.

Konfigurera ditt program för åtkomst till Queue Storage

Med QueueClient objektet kan du arbeta med en kö. Lägg till följande kod överst i en Python-fil där du programmatiskt vill komma åt en Azure-kö:

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

import os, uuid

Paketet os har stöd för att hämta en miljövariabel. Paketet uuid har stöd för att generera en unik identifierare för ett könamn.

Skapa en kö

Anslutningssträngen hämtas från miljövariabeln AZURE_STORAGE_CONNECTION_STRING som angavs tidigare.

Följande kod skapar ett QueueClient -objekt med hjälp av lagringsanslutningssträngen.

# 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-kömeddelanden lagras som text. Om du vill lagra binära data konfigurerar du Base64-kodnings- och avkodningsfunktioner innan du placerar ett meddelande i kön.

Konfigurera base64-kodnings- och avkodningsfunktioner när du skapar klientobjektet.

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

Infoga ett meddelande i en kö

Om du vill infoga ett meddelande i en kö använder du send_message metoden .

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

Granska meddelanden

Du kan titta på meddelanden utan att ta bort dem från kön genom att anropa peek_messages metoden . Som standard tittar den här metoden på ett enda meddelande.

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

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

Ändra innehållet i ett meddelande i kön

Du kan ändra innehållet i ett meddelande direkt i kön. Om meddelandet representerar en aktivitet kan du använda den här funktionen för att uppdatera aktivitetens status.

Följande kod använder update_message metoden för att uppdatera ett meddelande. Tidsgränsen för synlighet är inställd på 0, vilket innebär att meddelandet visas omedelbart och innehållet uppdateras.

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)

Hämta kölängden

Du kan hämta en uppskattning av antalet meddelanden i en kö.

Metoden get_queue_properties returnerar köegenskaper inklusive approximate_message_count.

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

Resultatet är bara ungefärligt eftersom meddelanden kan läggas till eller tas bort när tjänsten svarar på din begäran.

Ta bort meddelanden från kö

Ta bort ett meddelande från en kö i två steg. Om koden inte kan bearbeta ett meddelande säkerställer den här tvåstegsprocessen att du kan få samma meddelande och försöka igen. Anropa delete_message när meddelandet har bearbetats.

När du anropar receive_messages visas nästa meddelande i kön som standard. Ett meddelande som returneras från receive_messages blir osynligt för andra kodläsningsmeddelanden från den här kön. Som standard är det här meddelandet osynligt i 30 sekunder. Om du vill ta bort meddelandet från kön måste du även anropa 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)

Det finns två metoder som du kan använda för att anpassa meddelandehämtningen från en kö. För det första kan du hämta en grupp med meddelanden (upp till 32). För det andra kan du ange en längre eller kortare tidsgräns för osynlighet för att ge koden mer eller mindre tid att bearbeta klart varje meddelande.

I följande kodexempel används receive_messages metoden för att hämta meddelanden i batchar. Sedan bearbetas varje meddelande i varje batch med hjälp av en kapslad for loop. Koden ställer också in tidsgränsen för osynlighet till fem minuter för varje meddelande.

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)

Ta bort en kö

Om du vill ta bort en kö och alla meddelanden som finns i den anropar du delete_queue metoden .

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

Tips

Prova Microsoft Azure Lagringsutforskaren

Microsoft Azure Storage Explorer är en kostnadsfri, fristående app från Microsoft som gör det möjligt att arbeta visuellt med Azure Storage-data i Windows, macOS och Linux.

Nästa steg

Nu när du har lärt dig grunderna i Queue Storage följer du dessa länkar för att lära dig mer.

Relaterade kodexempel med inaktuella SDK:er för Python version 2 finns i Kodexempel med Python version 2.