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:
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:
Logga in på Azure-portalen.
Leta rätt på ditt lagringskonto.
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.
I fönstret Åtkomstnycklar väljer du Visa nycklar.
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.
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.