Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Queue Storage SDK for Python. Use for reliable message queuing, task distribution, and asynchronous processing. Triggers: "queue storage", "QueueServiceClient", "QueueClient", "message queue", "dequeue".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 55% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 46% | 0% |
Simple, cost-effective message queuing for asynchronous communication.
bashpip install azure-storage-queue azure-identity
bashAZURE_STORAGE_ACCOUNT_URL=https://<account>.queue.core.windows.net # Required for all auth methods AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
> 🔑 Two rules apply to every code sample below: > > 1. Prefer DefaultAzureCredential. It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation. > - Local dev: DefaultAzureCredential works as-is. > - Production: set AZURE_TOKEN_CREDENTIALS=prod (or AZURE_TOKEN_CREDENTIALS=<specific_credential>) to constrain the credential chain to production-safe credentials. > 2. Wrap every client in a context manager so HTTP transports, sockets, and token caches are released deterministically: > - Sync: with <Client>(...) as client: > - Async: async with <Client>(...) as client: and async with DefaultAzureCredential() as credential: (from azure.identity.aio) > > Snippets may abbreviate this setup, but production code should always follow both rules.
pythonfrom azure.identity import DefaultAzureCredential, ManagedIdentityCredential from azure.storage.queue import QueueServiceClient, QueueClient # Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential> credential = DefaultAzureCredential(require_envvar=True) # Or use a specific credential directly in production: # See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes # credential = ManagedIdentityCredential() account_url = "https://<account>.queue.core.windows.net" # Service client with QueueServiceClient(account_url=account_url, credential=credential) as service_client: # Use service_client here (see following sections for operations) ... # Queue client with QueueClient(account_url=account_url, queue_name="myqueue", credential=credential) as queue_client: # Use queue_client here (see following sections for operations) ...
python# Create queue service_client.create_queue("myqueue") # Get queue client queue_client = service_client.get_queue_client("myqueue") # Delete queue service_client.delete_queue("myqueue") # List queues for queue in service_client.list_queues(): print(queue.name)
python# Send message (string) queue_client.send_message("Hello, Queue!") # Send with options queue_client.send_message( content="Delayed message", visibility_timeout=60, # Hidden for 60 seconds time_to_live=3600 # Expires in 1 hour ) # Send JSON import json data = {"task": "process", "id": 123} queue_client.send_message(json.dumps(data))
python# Receive messages (makes them invisible temporarily) messages = queue_client.receive_messages( messages_per_page=10, visibility_timeout=30 # 30 seconds to process ) for message in messages: print(f"ID: {message.id}") print(f"Content: {message.content}") print(f"Dequeue count: {message.dequeue_count}") # Process message... # Delete after processing queue_client.delete_message(message)
python# Peek without hiding (doesn't affect visibility) messages = queue_client.peek_messages(max_messages=5) for message in messages: print(message.content)
python# Extend visibility or update content messages = queue_client.receive_messages() for message in messages: # Extend timeout (need more time) queue_client.update_message( message, visibility_timeout=60 ) # Update content and timeout queue_client.update_message( message, content="Updated content", visibility_timeout=60 )
python# Delete after successful processing messages = queue_client.receive_messages() for message in messages: try: # Process... queue_client.delete_message(message) except Exception: # Message becomes visible again after timeout pass
python# Delete all messages queue_client.clear_messages()
python# Get queue properties properties = queue_client.get_queue_properties() print(f"Approximate message count: {properties.approximate_message_count}") # Set/get metadata queue_client.set_queue_metadata(metadata={"environment": "production"}) properties = queue_client.get_queue_properties() print(properties.metadata)
pythonfrom azure.storage.queue.aio import QueueServiceClient, QueueClient from azure.identity.aio import DefaultAzureCredential async def queue_operations(): credential = DefaultAzureCredential() async with QueueClient( account_url="https://<account>.queue.core.windows.net", queue_name="myqueue", credential=credential ) as client: # Send await client.send_message("Async message") # Receive async for message in client.receive_messages(): print(message.content) await client.delete_message(message) import asyncio asyncio.run(queue_operations())
pythonfrom azure.storage.queue import QueueClient, BinaryBase64EncodePolicy, BinaryBase64DecodePolicy # For binary data with QueueClient( account_url=account_url, queue_name="myqueue", credential=credential, message_encode_policy=BinaryBase64EncodePolicy(), message_decode_policy=BinaryBase64DecodePolicy() ) as queue_client: # Send bytes queue_client.send_message(b"Binary content")
azure.xxx sync clients with azure.xxx.aio async clients in the same call path. Choose one mode per module.with Client(...) as client: (sync) or async with Client(...) as client: (async). For async DefaultAzureCredential from azure.identity.aio, also use async with credential: so tokens and transports are cleaned up.DefaultAzureCredential for portable auth across local dev and Azure (avoid connection strings / API keys when possible).dequeue_count for poison message detectionpeek_messages for monitoring without affecting queuetime_to_live to prevent stale messages| File | Contents | |------|----------| | references/capabilities.md | Additional non-hero capabilities, operation-group coverage, and production checklists. | | references/non-hero-scenarios.md | Dedicated non-hero examples for secondary/advanced scenarios. |
Other measured skills in the registry, with their headline benchmark lift.