mcpField
A
azure-storage-queue-py

azure-storage-queue-py

github.com/sickn33云与 DevOps48.7k38 次安装今天更新
代码仓库

关于 azure-storage-queue-py

为 Python 开发者介绍 Azure Queue Storage SDK,用于构建异步消息队列流程。内容涵盖队列和消息操作、同步与异步客户端、身份验证及消息可见性管理。

主要功能

  1. 01创建和删除队列
  2. 02发送、接收、查看及删除消息
  3. 03更新消息内容和可见性超时
  4. 04读取队列属性并设置元数据
  5. 05使用异步客户端与 Base64 编码

适用场景

  1. 01在服务之间传递异步消息
  2. 02延迟消息处理或设置过期时间
  3. 03处理消息并在成功后删除
  4. 04监控队列而不改变消息可见性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-storage-queue-py

安装后在 Claude Code 中输入/azure-storage-queue-py确认已加载。

详细介绍

适用于 Python 的 Azure Queue Storage SDK

简单、经济高效的消息队列,用于异步通信。

安装

pip install azure-storage-queue azure-identity

环境变量

AZURE_STORAGE_ACCOUNT_URL=https://<account>.queue.core.windows.net

身份验证

from azure.identity import DefaultAzureCredential
from azure.storage.queue import QueueServiceClient, QueueClient

credential = DefaultAzureCredential()
account_url = "https://<account>.queue.core.windows.net"

# Service client
service_client = QueueServiceClient(account_url=account_url, credential=credential)

# Queue client
queue_client = QueueClient(account_url=account_url, queue_name="myqueue", credential=credential)

队列操作

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

发送消息

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

接收消息

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

查看消息

# Peek without hiding (doesn't affect visibility)
messages = queue_client.peek_messages(max_messages=5)

for message in messages:
    print(message.content)

更新消息

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

删除消息

# 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

清空队列

# Delete all messages
queue_client.clear_messages()

队列属性

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

异步客户端

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

Base64 编码

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

# For binary data
queue_client = QueueClient(
    account_url=account_url,
    queue_name="myqueue",
    credential=credential,
    message_encode_policy=BinaryBase64EncodePolicy(),
    message_decode_policy=BinaryBase64DecodePolicy()
)

# Send bytes
queue_client.send_message(b"Binary content")

最佳实践

  1. 处理完成后删除消息,以防止重复处理
  2. 根据处理时间设置合适的可见性超时
  3. 处理 dequeue_count,用于检测毒消息
  4. 在高吞吐量场景下使用异步客户端
  5. 使用 peek_messages 进行监控,而不影响队列
  6. 设置 time_to_live 以防止消息过期
  7. 考虑使用 Service Bus 以获得高级功能(会话、主题)

适用场景

本技能适用于执行概述中描述的工作流或操作。

限制

  • 仅在任务明确符合上述范围时使用本技能。
  • 请勿将输出视为特定环境验证、测试或专家审查的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。

评论

支持 Markdown