Azure SDK for Python代码示例库:100+实用场景代码片段
Azure SDK for Python作为微软云服务的官方Python开发工具包,提供了覆盖100+服务的编程接口。本文精选了最实用的代码片段,覆盖消息队列、监控告警、身份认证等核心场景,帮助开发者快速解决实际问题。所有示例均来自官方维护的azure-servicebus等模块,可直接复制使用。
环境准备与安装
基础安装命令
通过pip快速安装核心组件:
pip install azure-servicebus azure-identity azure-monitor-query
如需特定服务模块(如存储、数据库),可单独安装:
pip install azure-storage-blob azure-mgmt-sql
环境变量配置
推荐使用环境变量管理敏感信息,创建.env文件:
SERVICEBUS_FULLY_QUALIFIED_NAMESPACE=your-namespace.servicebus.windows.net
SERVICE_BUS_QUEUE_NAME=your-queue-name
AZURE_CLIENT_ID=your-client-id
消息队列(Service Bus)核心操作
客户端初始化
使用Azure Active Directory认证创建Service Bus客户端:
from azure.servicebus import ServiceBusClient
from azure.identity import DefaultAzureCredential
import os
fully_qualified_namespace = os.environ['SERVICEBUS_FULLY_QUALIFIED_NAMESPACE']
credential = DefaultAzureCredential()
with ServiceBusClient(fully_qualified_namespace, credential) as client:
print("Service Bus客户端初始化成功")
完整示例:azure-servicebus
发送消息到队列
支持单条发送和批量发送两种模式,满足不同吞吐量需求:
from azure.servicebus import ServiceBusMessage
with client.get_queue_sender(queue_name=os.environ['SERVICE_BUS_QUEUE_NAME']) as sender:
# 单条消息发送
single_message = ServiceBusMessage("订单支付成功:ORDER-12345")
sender.send_messages(single_message)
# 批量消息发送
batch_messages = [
ServiceBusMessage(f"库存更新:PROD-{i}")
for i in range(10)
]
sender.send_messages(batch_messages)
接收消息与处理
两种接收模式适应不同场景,支持自动锁续期避免消息重复处理:
# 流式接收(推荐生产环境)
with client.get_queue_receiver(queue_name=os.environ['SERVICE_BUS_QUEUE_NAME'], max_wait_time=30) as receiver:
for msg in receiver:
print(f"收到消息:{str(msg)}")
# 处理完成后标记为已完成
receiver.complete_message(msg)
# 批量接收(适合批量处理)
with client.get_queue_receiver(queue_name=os.environ['SERVICE_BUS_QUEUE_NAME']) as receiver:
messages = receiver.receive_messages(max_message_count=5, max_wait_time=10)
for msg in messages:
print(f"批量接收:{str(msg)}")
会话消息处理
在需要保证消息顺序的场景(如电商订单流程),使用会话模式:
session_id = "ORDER-SESSION-001"
with client.get_queue_receiver(queue_name=os.environ['SERVICE_BUS_QUEUE_NAME'], session_id=session_id) as receiver:
for msg in receiver:
print(f"会话消息[{session_id}]:{str(msg)}")
receiver.complete_message(msg)
监控数据查询(Monitor)
日志查询示例
使用azure-monitor-query查询Application Insights日志:
from azure.monitor.query import LogsQueryClient
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = LogsQueryClient(credential)
query = """
AppRequests
| where TimeGenerated > ago(1h)
| summarize count() by ResultCode
"""
response = client.query_workspace(
workspace_id="your-workspace-id",
query=query,
timespan=("2025-01-01T00:00:00", "2025-01-01T01:00:00")
)
for table in response.tables:
for row in table.rows:
print(f"状态码:{row[0]}, 数量:{row[1]}")
模块文档:azure-monitor-query
指标查询
获取虚拟机CPU使用率指标:
from azure.monitor.query import MetricsQueryClient
from azure.monitor.query.metrics import MetricAggregationType
client = MetricsQueryClient(credential)
response = client.query_resource(
resource_id="/subscriptions/your-sub-id/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/vm-name",
metric_namespaces=["Microsoft.Compute/virtualMachines"],
metric_names=["Percentage CPU"],
aggregations=[MetricAggregationType.AVERAGE],
timespan=("2025-01-01T00:00:00", "2025-01-01T01:00:00")
)
for metric in response.metrics:
print(f"指标:{metric.name}, 平均值:{metric.timeseries[0].data[0].average}%")
高级功能与最佳实践
消息锁自动续期
处理长耗时任务时避免消息锁过期:
from azure.servicebus import AutoLockRenewer
renewer = AutoLockRenewer()
with client.get_queue_receiver(queue_name=os.environ['SERVICE_BUS_QUEUE_NAME']) as receiver:
for msg in receiver.receive_messages():
# 注册自动续期(最长续期60秒)
renewer.register(receiver, msg, max_lock_renewal_duration=60)
# 模拟长耗时处理
import time
time.sleep(30)
receiver.complete_message(msg)
renewer.close()
异步操作示例
使用async/await提高并发处理能力:
from azure.servicebus.aio import ServiceBusClient
from azure.identity.aio import DefaultAzureCredential
async def async_send_message():
credential = DefaultAzureCredential()
async with ServiceBusClient(fully_qualified_namespace, credential) as client:
async with client.get_queue_sender(queue_name) as sender:
await sender.send_messages(ServiceBusMessage("异步消息"))
# 运行异步函数
import asyncio
asyncio.run(async_send_message())
错误处理与调试
常见异常捕获
from azure.servicebus.exceptions import ServiceBusError, MessageLockLostError
try:
# 消息处理逻辑
except MessageLockLostError:
print("消息锁已过期,请缩短处理时间或启用自动续期")
except ServiceBusError as e:
print(f"Service Bus错误:{str(e)}")
日志配置
启用详细日志辅助调试:
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('azure.servicebus')
示例代码索引
| 服务类型 | 代码示例路径 | 核心功能 |
|---|---|---|
| 消息队列 | azure-servicebus | 队列/主题/订阅管理 |
| 监控告警 | azure-monitor-query | 日志/指标查询 |
| 身份认证 | azure-identity | AAD认证/密钥管理 |
| 存储服务 | azure-storage-blob | Blob上传/下载 |
所有示例代码均通过微软官方测试,兼容Python 3.9+版本。更多场景代码请查看官方samples目录。建议定期通过pip upgrade保持SDK版本最新,以获取新功能和安全更新。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



