Biblioteka klienta kolejki usługi Azure Storage dla języka Python — wersja 12.9.0
Azure Queue Storage to usługa do przechowywania dużej liczby komunikatów, do której można uzyskać dostęp z dowolnego miejsca na świecie za pośrednictwem uwierzytelnionego połączenia za pomocą protokołu HTTP lub HTTPS. Pojedynczy komunikat w kolejce może mieć rozmiar do 64 KiB, a kolejka może zawierać miliony komunikatów, maksymalnie do całkowitego limitu pojemności konta magazynu.
Najczęstsze zastosowania usługi Queue Storage obejmują:
- Tworzenie zaległości pracy do przetwarzania asynchronicznego
- Przekazywanie komunikatów między różnymi częściami aplikacji rozproszonej
Kod | źródłowyPakiet (PyPI) | Pakiet (Conda) | Dokumentacja referencyjna interfejsu | APIDokumentacja | produktuPróbki
Wprowadzenie
Wymagania wstępne
- Do korzystania z tego pakietu wymagany jest język Python w wersji 3.7 lub nowszej. Aby uzyskać więcej informacji, przeczytaj naszą stronę dotyczącą zestawu Azure SDK dla zasad obsługi wersji języka Python.
- Aby korzystać z tego pakietu, musisz mieć subskrypcję platformy Azure i konto usługi Azure Storage .
Instalowanie pakietu
Zainstaluj bibliotekę klienta kolejki usługi Azure Storage dla języka Python przy użyciu narzędzia pip:
pip install azure-storage-queue
Tworzenie konta magazynu
Jeśli chcesz utworzyć nowe konto magazynu, możesz użyć witryny Azure Portal, Azure PowerShell lub interfejsu wiersza polecenia platformy Azure:
# Create a new resource group to hold the storage account -
# if using an existing resource group, skip this step
az group create --name my-resource-group --location westus2
# Create the storage account
az storage account create -n my-storage-account-name -g my-resource-group
Tworzenie klienta
Biblioteka klienta kolejki usługi Azure Storage dla języka Python umożliwia interakcję z trzema typami zasobów: samym kontem magazynu, kolejkami i komunikatami. Interakcja z tymi zasobami rozpoczyna się od wystąpienia klienta. Aby utworzyć obiekt klienta, potrzebny będzie adres URL punktu końcowego usługi kolejki konta magazynu oraz poświadczenia umożliwiające uzyskanie dostępu do konta magazynu:
from azure.storage.queue import QueueServiceClient
service = QueueServiceClient(account_url="https://<my-storage-account-name>.queue.core.windows.net/", credential=credential)
Szukanie adresu URL konta
Adres URL usługi kolejki konta magazynu można znaleźć za pomocą witryny Azure Portal, Azure PowerShell lub interfejsu wiersza polecenia platformy Azure:
# Get the queue service URL for the storage account
az storage account show -n my-storage-account-name -g my-resource-group --query "primaryEndpoints.queue"
Typy poświadczeń
Parametr credential
może być podany w wielu różnych formularzach, w zależności od typu autoryzacji , której chcesz użyć:
Aby użyć tokenu sygnatury dostępu współdzielonego (SAS), podaj token jako ciąg. Jeśli adres URL konta zawiera token SAS, pomiń parametr poświadczeń. Token sygnatury dostępu współdzielonego można wygenerować w witrynie Azure Portal w obszarze "Sygnatura dostępu współdzielonego" lub użyć jednej z
generate_sas()
funkcji, aby utworzyć token sas dla konta magazynu lub kolejki:from datetime import datetime, timedelta from azure.storage.queue import QueueServiceClient, generate_account_sas, ResourceTypes, AccountSasPermissions sas_token = generate_account_sas( account_name="<storage-account-name>", account_key="<account-access-key>", resource_types=ResourceTypes(service=True), permission=AccountSasPermissions(read=True), start=datetime.utcnow(), expiry=datetime.utcnow() + timedelta(hours=1) ) queue_service_client = QueueServiceClient(account_url="https://<my_account_name>.queue.core.windows.net", credential=sas_token)
Aby użyć klucza współużytkowanego konta magazynu (czyli klucza konta lub klucza dostępu), podaj klucz jako ciąg. Można to znaleźć w witrynie Azure Portal w sekcji "Klucze dostępu" lub uruchamiając następujące polecenie interfejsu wiersza polecenia platformy Azure:
az storage account keys list -g MyResourceGroup -n MyStorageAccount
Użyj klucza jako parametru poświadczeń, aby uwierzytelnić klienta:
from azure.storage.queue import QueueServiceClient service = QueueServiceClient(account_url="https://<my_account_name>.queue.core.windows.net", credential="<account_access_key>")
Aby użyć poświadczeń tokenu usługi Azure Active Directory (AAD), podaj wystąpienie żądanego typu poświadczeń uzyskanego z biblioteki azure-identity . Na przykład wartość DefaultAzureCredential może służyć do uwierzytelniania klienta.
Wymaga to konfiguracji początkowej:
- Instalowanie tożsamości platformy Azure
- Rejestrowanie nowej aplikacji usługi AAD i przyznawanie uprawnień dostępu do usługi Azure Storage
- Udzielanie dostępu do danych usługi Azure Queue za pomocą kontroli dostępu opartej na rolach w witrynie Azure Portal
- Ustaw wartości identyfikatora klienta, identyfikatora dzierżawy i wpisu tajnego klienta aplikacji usługi AAD jako zmienne środowiskowe: AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET
Użyj zwróconego poświadczenia tokenu, aby uwierzytelnić klienta:
from azure.identity import DefaultAzureCredential from azure.storage.queue import QueueServiceClient token_credential = DefaultAzureCredential() queue_service_client = QueueServiceClient( account_url="https://<my_account_name>.queue.core.windows.net", credential=token_credential )
Tworzenie klienta na podstawie parametry połączenia
W zależności od przypadku użycia i metody autoryzacji możesz wolisz zainicjować wystąpienie klienta z magazynem parametry połączenia zamiast podać adres URL konta i poświadczenia oddzielnie. W tym celu przekaż parametry połączenia magazynu do metody klasy klientafrom_connection_string
:
from azure.storage.queue import QueueServiceClient
connection_string = "DefaultEndpointsProtocol=https;AccountName=xxxx;AccountKey=xxxx;EndpointSuffix=core.windows.net"
service = QueueServiceClient.from_connection_string(conn_str=connection_string)
Parametry połączenia konta magazynu można znaleźć w witrynie Azure Portal w sekcji "Klucze dostępu" lub uruchamiając następujące polecenie interfejsu wiersza polecenia:
az storage account show-connection-string -g MyResourceGroup -n MyStorageAccount
Kluczowe pojęcia
Następujące składniki składają się na usługę Azure Queue Service:
- Samo konto magazynu
- Kolejka na koncie magazynu, która zawiera zestaw komunikatów
- Komunikat w kolejce w dowolnym formacie do 64 KiB
Biblioteka klienta kolejki usługi Azure Storage dla języka Python umożliwia interakcję z każdym z tych składników przy użyciu dedykowanego obiektu klienta.
Klienci asynchroniczny
Ta biblioteka zawiera kompletny interfejs API asynchroniczny obsługiwany w języku Python 3.5 lub nowszym. Aby go użyć, należy najpierw zainstalować transport asynchroniczny, taki jak aiohttp. Aby uzyskać więcej informacji, zobacz dokumentację platformy azure-core .
Klienci asynchroniczny i poświadczenia powinny być zamknięte, gdy nie są już potrzebne. Te obiekty są asynchronicznych menedżerów kontekstów i definiują metody asynchroniczne close
.
Klienci
Dwóch różnych klientów jest dostarczanych do interakcji z różnymi składnikami usługi Kolejki:
- QueueServiceClient — ten klient reprezentuje interakcję z samym kontem usługi Azure Storage i umożliwia uzyskanie wstępnie skonfigurowanych wystąpień klienta w celu uzyskania dostępu do kolejek w obrębie. Zapewnia operacje pobierania i konfigurowania właściwości konta, a także tworzenia i usuwania kolejek w ramach konta. Aby wykonać operacje w określonej kolejce, pobierz klienta przy użyciu
get_queue_client
metody . - QueueClient — ten klient reprezentuje interakcję z określoną kolejką (która nie musi jeszcze istnieć). Zapewnia operacje tworzenia, usuwania lub konfigurowania kolejki oraz obejmuje operacje wysyłania, odbierania, podglądu, usuwania i aktualizowania komunikatów w niej.
Komunikaty
- Send — dodaje komunikat do kolejki i opcjonalnie ustawia limit czasu widoczności komunikatu.
- Odbierz — pobiera komunikat z kolejki i sprawia, że jest niewidoczny dla innych użytkowników.
- Podgląd — pobiera komunikat z przodu kolejki bez zmiany widoczności komunikatu.
- Update — Aktualizacje limit czasu widoczności komunikatu i/lub zawartości wiadomości.
- Delete — usuwa określony komunikat z kolejki.
- Clear — czyści wszystkie komunikaty z kolejki.
Przykłady
W poniższych sekcjach przedstawiono kilka fragmentów kodu obejmujących niektóre z najbardziej typowych zadań kolejki magazynu, w tym:
Tworzenie kolejki
Tworzenie kolejki na koncie magazynu
from azure.storage.queue import QueueClient
queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
queue.create_queue()
Tworzenie kolejki przy użyciu klienta asynchronicznego
from azure.storage.queue.aio import QueueClient
queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
await queue.create_queue()
Wysyłanie komunikatów
Wysyłanie komunikatów do kolejki
from azure.storage.queue import QueueClient
queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
queue.send_message("I'm using queues!")
queue.send_message("This is my second message")
Wysyłanie komunikatów asynchronicznie
import asyncio
from azure.storage.queue.aio import QueueClient
queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
await asyncio.gather(
queue.send_message("I'm using queues!"),
queue.send_message("This is my second message")
)
Odbieranie komunikatów
Odbieranie i przetwarzanie komunikatów z kolejki
from azure.storage.queue import QueueClient
queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
response = queue.receive_messages()
for message in response:
print(message.content)
queue.delete_message(message)
# Printed messages from the front of the queue:
# >> I'm using queues!
# >> This is my second message
Odbieranie i przetwarzanie komunikatów w partiach
from azure.storage.queue import QueueClient
queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
response = queue.receive_messages(messages_per_page=10)
for message_batch in response.by_page():
for message in message_batch:
print(message.content)
queue.delete_message(message)
Odbieranie i przetwarzanie komunikatów asynchronicznie
from azure.storage.queue.aio import QueueClient
queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
response = queue.receive_messages()
async for message in response:
print(message.content)
await queue.delete_message(message)
Konfiguracja opcjonalna
Opcjonalne argumenty słów kluczowych, które można przekazać na poziomie klienta i na poziomie operacji.
Konfiguracja zasad ponawiania prób
Użyj następujących argumentów słów kluczowych podczas tworzenia wystąpienia klienta, aby skonfigurować zasady ponawiania prób:
- retry_total (int): całkowita liczba ponownych prób do zezwolenia. Ma pierwszeństwo przed innymi liczbami.
Przekaż polecenie ,
retry_total=0
jeśli nie chcesz ponowić próby na żądaniach. Wartość domyślna to 10. - retry_connect (int): ile błędów związanych z połączeniem należy ponowić próbę. Wartość domyślna to 3.
- retry_read (int): ile razy należy ponowić próbę w przypadku błędów odczytu. Wartość domyślna to 3.
- retry_status (int): ile razy należy ponowić próbę w przypadku nieprawidłowych kodów stanu. Wartość domyślna to 3.
- retry_to_secondary (bool): czy żądanie powinno zostać ponowione do pomocniczej, jeśli jest możliwe.
Powinno być włączone tylko konta RA-GRS są używane i potencjalnie nieaktualne dane mogą być obsługiwane.
Wartość domyślna to
False
.
Inna konfiguracja klienta/operacji
Inne opcjonalne argumenty słowa kluczowego konfiguracji, które można określić na kliencie lub na operację.
Argumenty słów kluczowych klienta:
- connection_timeout (int): liczba sekund oczekiwania klienta na nawiązanie połączenia z serwerem. Wartość domyślna to 20 sekund.
- read_timeout (int): liczba sekund oczekiwania klienta między kolejnymi operacjami odczytu na odpowiedź z serwera. Jest to limit czasu na poziomie gniazda i nie ma to wpływu na ogólny rozmiar danych. Limity czasu odczytu po stronie klienta zostaną automatycznie ponawiane. Wartość domyślna to 60 sekund.
- transport (dowolny): transport dostarczony przez użytkownika w celu wysłania żądania HTTP.
Argumenty słów kluczowych dla operacji:
- raw_response_hook (możliwe do wywołania): podane wywołanie zwrotne używa odpowiedzi zwróconej z usługi.
- raw_request_hook (z możliwością wywołania): podane wywołanie zwrotne używa żądania przed wysłaniem do usługi.
- client_request_id (str): opcjonalna identyfikacja żądania przez użytkownika.
- user_agent (str): dołącza wartość niestandardową do nagłówka user-agent, który ma zostać wysłany wraz z żądaniem.
- logging_enable (wartość logiczna): włącza rejestrowanie na poziomie DEBUG. Wartość domyślna to False. Można również przekazać na poziomie klienta, aby włączyć je dla wszystkich żądań.
- logging_body (wartość logiczna): umożliwia rejestrowanie treści żądania i odpowiedzi. Wartość domyślna to False. Można również przekazać na poziomie klienta, aby włączyć je dla wszystkich żądań.
- nagłówki (dict): przekazuj nagłówki niestandardowe jako pary klucz, wartość. Przykład.
headers={'CustomValue': value}
Rozwiązywanie problemów
Ogólne
Klienci kolejki usługi Storage zgłaszają wyjątki zdefiniowane w usłudze Azure Core.
Ta lista może służyć do przywoływania zgłaszanych wyjątków. Aby uzyskać określony kod błędu wyjątku, użyj atrybutu error_code
, tj exception.error_code
. .
Rejestrowanie
Ta biblioteka używa standardowej biblioteki rejestrowania do rejestrowania. Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na poziomie INFORMACJI.
Szczegółowe rejestrowanie na poziomie DEBUG, w tym treści żądań/odpowiedzi i nieredagowanych nagłówków, można włączyć na kliencie z argumentem logging_enable
:
import sys
import logging
from azure.storage.queue import QueueServiceClient
# Create a logger for the 'azure.storage.queue' SDK
logger = logging.getLogger('azure.storage.queue')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# This client will log detailed information about its HTTP sessions, at DEBUG level
service_client = QueueServiceClient.from_connection_string("your_connection_string", logging_enable=True)
logging_enable
Podobnie można włączyć szczegółowe rejestrowanie dla pojedynczej operacji, nawet jeśli nie jest włączone dla klienta:
service_client.get_service_stats(logging_enable=True)
Następne kroki
Więcej przykładów kodu
Rozpocznij pracę z naszymi przykładami kolejek.
Kilka przykładów zestawu SDK dla języka Python kolejek usługi Storage jest dostępnych w repozytorium GitHub zestawu SDK. Te przykłady zawierają przykładowy kod dla dodatkowych scenariuszy, które często występują podczas pracy z kolejkami magazynu:
queue_samples_hello_world.py (wersja asynchronizna) — przykłady znalezione w tym artykule:
- Tworzenie klienta
- Tworzenie kolejki
- Wysyłanie komunikatów
- Odbieranie komunikatów
queue_samples_authentication.py (wersja asynchronicka) — przykłady uwierzytelniania i tworzenia klienta:
- Z parametry połączenia
- Z klucza dostępu współdzielonego
- Z tokenu sygnatury dostępu współdzielonego
- Z usługi Azure Active Directory
queue_samples_service.py (wersja asynchroniowa) — przykłady interakcji z usługą kolejki:
- Pobieranie i ustawianie właściwości usługi
- Wyświetlanie listy kolejek na koncie magazynu
- Tworzenie i usuwanie kolejki z usługi
- Pobieranie elementu QueueClient
queue_samples_message.py (wersja asynchroniowa) — przykłady pracy z kolejkami i komunikatami:
- Ustawianie zasad dostępu
- Pobieranie i ustawianie metadanych kolejki
- Wysyłanie i odbieranie komunikatów
- Usuń określone komunikaty i wyczyść wszystkie komunikaty
- Podgląd i aktualizowanie komunikatów
Dodatkowa dokumentacja
Aby uzyskać bardziej obszerną dokumentację dotyczącą usługi Azure Queue Storage, zobacz dokumentację usługi Azure Queue Storage dotyczącą docs.microsoft.com.
Współtworzenie
W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź stronę https://cla.microsoft.com.
Po przesłaniu żądania ściągnięcia robot CLA automatycznie określi, czy musisz przekazać umowę CLA, i doda odpowiednie informacje do tego żądania (na przykład etykietę czy komentarz). Po prostu postępuj zgodnie z instrukcjami robota. Wystarczy zrobić to raz dla wszystkich repozytoriów, w przypadku których jest używana nasza umowa CLA.
W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.
Azure SDK for Python