Azure Service Bus SDK for Python 面向使用 Python 构建可靠云端消息通信的场景,提供队列与发布/订阅主题两类企业消息能力。
【主要能力】 SDK 的客户端类型包括:ServiceBusClient 负责连接管理,直接实例化;ServiceBusSender 用于发送消息,通过 client.get_queue_sender() 或 get_topic_sender() 获取;ServiceBusReceiver 用于接收消息,通过 client.get_queue_receiver() 或 get_subscription_receiver() 获取。
【安装与环境】 安装命令为 pip install azure-servicebus azure-identity。可配置的环境变量包括:SERVICEBUS_FULLY_QUALIFIED_NAMESPACE、SERVICEBUS_QUEUE_NAME、SERVICEBUS_TOPIC_NAME、SERVICEBUS_SUBSCRIPTION_NAME。
【身份验证】 示例使用 DefaultAzureCredential(来自 azure.identity)与 ServiceBusClient,并通过 fully_qualified_namespace 指定命名空间。
【发送与接收】 异步发送支持单条消息、批量消息列表,以及通过 create_message_batch() 控制批次大小(批次满时抛出 ValueError 后先发送再新建批次)。异步接收使用 receive_messages(max_message_count, max_wait_time),处理完成后调用 complete_message() 将消息移出队列。接收模式分为 PEEK_LOCK(默认,消息被锁定,必须完成或放弃)与 RECEIVE_AND_DELETE(接收即移除,至多一次投递),可通过 ServiceBusReceiveMode 指定。
【消息结算】 支持 complete_message()(成功,移出队列)、abandon_message()(释放锁并立即重试)、dead_letter_message(reason, error_description)(移入死信队列)、defer_message()(搁置,需按序列号接收)。
【主题与订阅】 通过 get_topic_sender(topic_name) 发送到主题,通过 get_subscription_receiver(topic_name, subscription_name) 从订阅接收消息。
【会话与顺序】 可为消息设置 session_id 实现 FIFO;接收时既可指定具体 session_id,也可使用 NEXT_AVAILABLE_SESSION 接收下一个可用会话。
【计划消息】 使用 schedule_messages(message, scheduled_time) 计划发送并返回 sequence_number,通过 cancel_scheduled_messages(sequence_number) 取消。
【死信队列】 通过 ServiceBusSubQueue.DEAD_LETTER 指定子队列接收死信消息,并可读取 dead_letter_reason。
【同步客户端】 提供同步 Client 用法,适用于简单脚本:使用 with 上下文管理 ServiceBusClient、发送者与接收者,接收时可迭代消息并调用 complete_message()。
【最佳实践】 生产负载建议使用异步客户端;使用上下文管理器确保正确清理;处理成功后完成消息;使用死信队列处理毒消息;使用会话实现有序 FIFO 处理;高吞吐场景使用消息批次;设置 max_wait_time 避免无限阻塞。
【参考文件】 references/patterns.md 涵盖竞争消费者、会话、重试模式、请求-响应、事务;references/dead-letter.md 涵盖死信处理、毒消息、重处理策略;scripts/setup_servicebus.py 提供队列/主题/订阅管理与死信监控的 CLI。脚本的删除命令需要 --confirm-delete;使用 --filter 创建订阅会替换新建订阅上的默认规则;实际使用前需与用户确认命名空间与具体实体/操作,建议使用可丢弃的测试命名空间。
【适用场景】 适用于队列、主题、订阅等企业消息模式的实现,以及需要可靠云端消息通信的 Python 项目。
【限制】 仅当任务明确匹配上述范围时使用;输出不应替代特定环境的验证、测试或专家审查;若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。