azure-storage-queue-py について
非同期メッセージ処理を構築する Python 開発者向けに、Azure Queue Storage SDK を説明するスキルです。キューとメッセージの操作、同期・非同期クライアント、認証、メッセージの可視性管理を扱います。
主な機能
- 01キューの作成と削除
- 02メッセージの送信、受信、確認、削除
- 03メッセージ内容と可視性タイムアウトの更新
- 04キュー属性の取得とメタデータ設定
- 05非同期クライアントと Base64 エンコード
活用シーン
- 01サービス間の非同期メッセージ連携
- 02処理の遅延やメッセージ有効期限の設定
- 03処理成功後のメッセージ削除
- 04可視性を変えずにキューを監視
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-storage-queue-pyインストール後、Claude Code で/azure-storage-queue-pyを入力して読み込まれたか確認します。
詳細
Azure Queue Storage SDK for Python
非同期通信のための、シンプルでコスト効率の高いメッセージキューイング。
インストール
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")
ベストプラクティス
- 処理後にメッセージを削除するして、再処理を防ぎます
- 処理時間に応じて適切な可視性タイムアウトを設定する
- ポイズンメッセージの検出のために
dequeue_countを処理する - 高スループットのシナリオでは非同期クライアントを使用する
- キューに影響を与えずに監視するには
peek_messagesを使用する - 古いメッセージを防ぐために
time_to_liveを設定する - 高度な機能(セッション、トピック)には Service Bus を検討する
使用する場合
このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用されます。
制限事項
- このスキルは、タスクが上記の範囲に明確に一致する場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代替として扱わないでください。
- 必要な入力、権限、安全境界、または成功基準が欠けている場合は、停止して明確化を求めてください。
コメント
Markdown 対応