Delen via


Azure Storage Queues-clientbibliotheek voor Python - versie 12.9.0

Azure Queue Storage is een service voor de opslag van grote aantallen berichten die via HTTP of HTTPS overal vandaan kunnen worden opgevraagd met geverifieerde aanroepen. Eén wachtrijbericht kan maximaal 64 KiB groot zijn en een wachtrij kan miljoenen berichten bevatten, tot de totale capaciteitslimiet van een opslagaccount.

Veelvoorkomende toepassingen van Queue Storage zijn onder andere:

  • Het maken van een voorraad werk dat asynchroon moet worden verwerkt
  • Berichten doorgeven tussen verschillende onderdelen van een gedistribueerde toepassing

Broncode | Pakket (PyPI) | Pakket (Conda) | API-referentiedocumentatie | Productdocumentatie | Monsters

Aan de slag

Vereisten

Het pakket installeren

Installeer de Azure Storage Queues-clientbibliotheek voor Python met pip:

pip install azure-storage-queue

Create a storage account

Als u een nieuw opslagaccount wilt maken, kunt u Azure Portal, Azure PowerShell of Azure CLI gebruiken:

# 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

De client maken

Met de Azure Storage Queues-clientbibliotheek voor Python kunt u werken met drie typen resources: het opslagaccount zelf, wachtrijen en berichten. Interactie met deze resources begint met een exemplaar van een client. Als u een clientobject wilt maken, hebt u de service-eindpunt-URL voor de wachtrij van het opslagaccount en een referentie nodig waarmee u toegang hebt tot het opslagaccount:

from azure.storage.queue import QueueServiceClient

service = QueueServiceClient(account_url="https://<my-storage-account-name>.queue.core.windows.net/", credential=credential)

De account-URL opzoeken

U kunt de SERVICE-URL voor de wachtrij van het opslagaccount vinden met behulp van de Azure-portal, Azure PowerShell of Azure CLI:

# 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"

Typen referenties

De credential parameter kan in verschillende vormen worden opgegeven, afhankelijk van het type autorisatie dat u wilt gebruiken:

  1. Als u een SAS-token (Shared Access Signature) wilt gebruiken, geeft u het token op als een tekenreeks. Als uw account-URL het SAS-token bevat, laat u de referentieparameter weg. U kunt een SAS-token genereren vanuit de Azure-portal onder Shared Access Signature of een van de generate_sas() functies gebruiken om een SAS-token te maken voor het opslagaccount of de wachtrij:

    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)
    
  2. Als u een gedeelde sleutel voor een opslagaccount (ook wel accountsleutel of toegangssleutel genoemd) wilt gebruiken, geeft u de sleutel op als een tekenreeks. U kunt dit vinden in Azure Portal onder de sectie Toegangssleutels of door de volgende Azure CLI-opdracht uit te voeren:

    az storage account keys list -g MyResourceGroup -n MyStorageAccount

    Gebruik de sleutel als referentieparameter om de client te verifiëren:

    from azure.storage.queue import QueueServiceClient
    service = QueueServiceClient(account_url="https://<my_account_name>.queue.core.windows.net", credential="<account_access_key>")
    
  3. Als u een AAD-tokenreferentie (Azure Active Directory) wilt gebruiken, geeft u een exemplaar op van het gewenste referentietype dat is verkregen uit de azure-identity-bibliotheek . DefaultAzureCredential kan bijvoorbeeld worden gebruikt om de client te verifiëren.

    Hiervoor is enige initiële installatie vereist:

    Gebruik de geretourneerde tokenreferentie om de client te verifiëren:

        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
        )
    

De client maken op basis van een verbindingsreeks

Afhankelijk van uw gebruiksscenario en autorisatiemethode, kunt u er de voorkeur aan geven om een clientexemplaren te initialiseren met een opslag-verbindingsreeks in plaats van de account-URL en referenties afzonderlijk op te geven. U doet dit door de opslag-verbindingsreeks door te geven aan de klassemethode van from_connection_string de client:

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)

De verbindingsreeks voor uw opslagaccount vindt u in Azure Portal onder de sectie Toegangssleutels of door de volgende CLI-opdracht uit te voeren:

az storage account show-connection-string -g MyResourceGroup -n MyStorageAccount

Belangrijkste concepten

De Azure Queue Service bestaat uit de volgende onderdelen:

  • Het opslagaccount zelf
  • Een wachtrij in het opslagaccount, die een set berichten bevat
  • Een bericht in een wachtrij, in elke indeling, van maximaal 64 KiB

Met de Azure Storage Queues-clientbibliotheek voor Python kunt u met elk van deze onderdelen communiceren via het gebruik van een toegewezen clientobject.

Asynchrone clients

Deze bibliotheek bevat een volledige asynchrone API die wordt ondersteund in Python 3.5+. Als u deze wilt gebruiken, moet u eerst een asynchroon transport installeren, zoals aiohttp. Zie azure-core-documentatie voor meer informatie.

Asynchrone clients en referenties moeten worden gesloten wanneer ze niet meer nodig zijn. Deze objecten zijn asynchrone contextbeheerders en definiëren asynchrone close methoden.

Clients

Er zijn twee verschillende clients beschikbaar om te communiceren met de verschillende onderdelen van de Queue Service:

  1. QueueServiceClient : deze client vertegenwoordigt interactie met het Azure-opslagaccount zelf en stelt u in staat om vooraf geconfigureerde clientexemplaren te verkrijgen voor toegang tot de wachtrijen binnen. Het biedt bewerkingen voor het ophalen en configureren van de accounteigenschappen, evenals het weergeven, maken en verwijderen van wachtrijen binnen het account. Als u bewerkingen wilt uitvoeren op een specifieke wachtrij, haalt u een client op met behulp van de get_queue_client methode .
  2. QueueClient : deze client vertegenwoordigt interactie met een specifieke wachtrij (die nog niet hoeft te bestaan). Het biedt bewerkingen voor het maken, verwijderen of configureren van een wachtrij en bevat bewerkingen voor het verzenden, ontvangen, bekijken, verwijderen en bijwerken van berichten in de wachtrij.

Berichten

  • Verzenden : voegt een bericht toe aan de wachtrij en stelt desgewenst een zichtbaarheidstime-out in voor het bericht.
  • Ontvangen : haalt een bericht op uit de wachtrij en maakt het onzichtbaar voor andere gebruikers.
  • Kort weergeven: haalt een bericht op van de voorkant van de wachtrij, zonder de zichtbaarheid van het bericht te wijzigen.
  • Bijwerken: Updates de zichtbaarheidstime-out van een bericht en/of de berichtinhoud.
  • Verwijderen : hiermee verwijdert u een opgegeven bericht uit de wachtrij.
  • Wissen : hiermee wist u alle berichten uit de wachtrij.

Voorbeelden

De volgende secties bevatten verschillende codefragmenten voor enkele van de meest voorkomende opslagwachtrijtaken, waaronder:

Een wachtrij maken

Een wachtrij maken in uw opslagaccount

from azure.storage.queue import QueueClient

queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
queue.create_queue()

De asynchrone client gebruiken om een wachtrij te maken

from azure.storage.queue.aio import QueueClient

queue = QueueClient.from_connection_string(conn_str="<connection_string>", queue_name="myqueue")
await queue.create_queue()

Berichten verzenden

Berichten verzenden naar uw wachtrij

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

Berichten asynchroon verzenden

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

Berichten ontvangen

Berichten van uw wachtrij ontvangen en verwerken

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

Berichten in batches ontvangen en verwerken

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)

Berichten asynchroon ontvangen en verwerken

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)

Optionele configuratie

Optionele trefwoordargumenten die kunnen worden doorgegeven op het niveau van de client en per bewerking.

Configuratie van beleid voor opnieuw proberen

Gebruik de volgende trefwoordargumenten bij het instantiëren van een client om het beleid voor opnieuw proberen te configureren:

  • retry_total (int): het totale aantal nieuwe pogingen dat moet worden toegestaan. Heeft voorrang op andere aantallen. Geef door retry_total=0 als u aanvragen niet opnieuw wilt proberen. De standaardwaarde is 10.
  • retry_connect (int): hoeveel verbindingsfouten u opnieuw wilt proberen. Standaardwaarde is 3.
  • retry_read (int): hoe vaak moet u het opnieuw proberen bij leesfouten. Standaardwaarde is 3.
  • retry_status (int): hoe vaak moet u ongeldige statuscodes opnieuw proberen. Standaardwaarde is 3.
  • retry_to_secondary (bool): of de aanvraag opnieuw moet worden geprobeerd naar secundaire, indien mogelijk. Dit mag alleen worden ingeschakeld wanneer RA-GRS-accounts worden gebruikt en mogelijk verouderde gegevens kunnen worden verwerkt. De standaardwaarde is False.

Andere client/configuratie per bewerking

Andere optionele configuratiezoekwoordargumenten die kunnen worden opgegeven op de client of per bewerking.

Trefwoordargumenten voor client:

  • connection_timeout (int): het aantal seconden dat de client wacht om verbinding te maken met de server. De standaardwaarde is 20 seconden.
  • read_timeout (int): het aantal seconden dat de client tussen opeenvolgende leesbewerkingen wacht op een antwoord van de server. Dit is een time-out op socketniveau en wordt niet beïnvloed door de totale gegevensgrootte. Time-outs aan de clientzijde worden automatisch opnieuw geprobeerd. De standaardwaarde is 60 seconden.
  • transport (Any): door de gebruiker opgegeven transport om de HTTP-aanvraag te verzenden.

Trefwoordargumenten per bewerking:

  • raw_response_hook (aanroepbaar): de opgegeven callback gebruikt het antwoord dat is geretourneerd door de service.
  • raw_request_hook (aanroepbaar): de opgegeven callback gebruikt de aanvraag voordat deze naar de service wordt verzonden.
  • client_request_id (str): optionele door de gebruiker opgegeven identificatie van de aanvraag.
  • user_agent (str): voegt de aangepaste waarde toe aan de header user-agent die samen met de aanvraag moet worden verzonden.
  • logging_enable (bool): hiermee schakelt u logboekregistratie in op het niveau VAN FOUTOPSPORING. Standaard ingesteld op False. Kan ook worden doorgegeven op clientniveau om het voor alle aanvragen in te schakelen.
  • logging_body (bool): hiermee schakelt u logboekregistratie van de aanvraag- en antwoordtekst in. Standaard ingesteld op False. Kan ook worden doorgegeven op clientniveau om het voor alle aanvragen in te schakelen.
  • headers (dict): geef aangepaste headers door als sleutel- en waardeparen. Bijvoorbeeld. headers={'CustomValue': value}

Problemen oplossen

Algemeen

Storage Queue-clients genereren uitzonderingen die zijn gedefinieerd in Azure Core.

Deze lijst kan worden gebruikt ter referentie om opgetreden uitzonderingen te ondervangen. Als u de specifieke foutcode van de uitzondering wilt ophalen, gebruikt u het error_code kenmerk, dat wil doen exception.error_code.

Logboekregistratie

Deze bibliotheek gebruikt de standaardbibliotheek voor logboekregistratie voor logboekregistratie. Basisinformatie over HTTP-sessies (URL's, headers, enzovoort) wordt geregistreerd op INFO-niveau.

Gedetailleerde logboekregistratie op foutopsporingsniveau, inclusief aanvraag-/antwoordteksten en niet-geredigeerde headers, kan worden ingeschakeld op een client met het logging_enable argument:

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)

Op dezelfde manier kan logging_enable logboekregistratie voor één bewerking inschakelen, zelfs wanneer dit niet is ingeschakeld voor de client:

service_client.get_service_stats(logging_enable=True)

Volgende stappen

Meer voorbeeldcode

Ga aan de slag met onze wachtrijvoorbeelden.

Er zijn verschillende Python SDK-voorbeelden voor Storage Queues beschikbaar in de GitHub-opslagplaats van de SDK. Deze voorbeelden bevatten voorbeeldcode voor aanvullende scenario's die vaak voorkomen tijdens het werken met Opslagwachtrijen:

  • queue_samples_hello_world.py (asynchrone versie): voorbeelden in dit artikel:

    • Client maken
    • Een wachtrij maken
    • Berichten verzenden
    • Berichten ontvangen
  • queue_samples_authentication.py (asynchrone versie): voorbeelden voor het verifiëren en maken van de client:

    • Vanuit een verbindingsreeks
    • Vanuit een gedeelde toegangssleutel
    • Vanuit een Shared Access Signature-token
    • Vanuit Azure Active Directory
  • queue_samples_service.py (asynchrone versie): voorbeelden voor interactie met de wachtrijservice:

    • Service-eigenschappen ophalen en instellen
    • Wachtrijen in een opslagaccount weergeven
    • Een wachtrij maken en verwijderen uit de service
    • De QueueClient ophalen
  • queue_samples_message.py (asynchrone versie): voorbeelden voor het werken met wachtrijen en berichten:

    • Een toegangsbeleid instellen
    • Metagegevens van wachtrij ophalen en instellen
    • Berichten verzenden en ontvangen
    • Opgegeven berichten verwijderen en alle berichten wissen
    • berichten Kort weergeven en bijwerken

Aanvullende documentatie

Zie de Documentatie over Azure Queue Storage over docs.microsoft.com voor uitgebreidere documentatie over Azure Queue Storage .

Bijdragen

Wij verwelkomen bijdragen en suggesties voor dit project. Voor de meeste bijdragen moet u instemmen met een licentieovereenkomst voor bijdragers (CLA: Contributor License Agreement) waarin u verklaart dat u gerechtigd bent ons het recht te geven uw bijdrage te gebruiken, en dat u dit ook doet. Ga naar https://cla.microsoft.com voor meer informatie.

Wanneer u een pull-aanvraag indient, wordt met een CLA-bot automatisch bepaald of u een CLA moet verschaffen en wordt de pull-aanvraag dienovereenkomstig opgemaakt (bijvoorbeeld met een label of commentaar). Volg gewoon de instructies van de bot. U hoeft dit maar eenmaal te doen voor alle repo's waar gebruik wordt gemaakt van onze CLA.

Op dit project is de Microsoft Open Source Code of Conduct (Microsoft Open Source-gedragscode) van toepassing. Zie voor meer informatie de veelgestelde vragen over de gedragscode of neem contact op opencode@microsoft.com met eventuele aanvullende vragen of opmerkingen.