You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Service Bus请求成功但队列无消息问题排查

Azure Function发送Service Bus队列消息无内容排查方案
  • 异步方法未正确触发执行
    你的send_single_message是异步方法,若调用时未使用await关键字(或在同步上下文未用asyncio.run()包裹),方法会被挂起但实际未执行发送逻辑。比如同步HTTP触发函数中直接调用send_single_message(),函数会直接结束,消息根本没发出去,但不会抛出异常,导致请求和日志都显示"成功"。

  • ServiceBusClient被提前回收
    __init__中创建的servicebus_client是局部变量,__init__执行完毕后可能被Python垃圾回收机制回收,导致后续sender操作失效。需将servicebus_client保存为类属性,确保其在实例生命周期内存在:

class ServiceBusSenderClient:
    def __init__(self, fully_qualified_namespace, queue_name):
        credentials = DefaultAzureCredential()
        self.servicebus_client = ServiceBusClient(fully_qualified_namespace=fully_qualified_namespace, credential=credentials, logging_enable=True)
        self.sender = self.servicebus_client.get_queue_sender(queue_name=queue_name)
    
    async def send_single_message(self, message:str):
        message = ServiceBusMessage(message)
        await self.sender.send_messages(message)
        logging.info(f"Sent message: {message} to queue {self.sender.queue_name}")

    def close(self):
        self.sender.close()
        self.servicebus_client.close()
  • 消息进入死信队列或被锁定
    检查Service Bus队列的死信队列,确认是否因消息大小超限、属性不合法等原因被移入死信。同时查看队列指标中的「锁定消息数」,若有其他消费者正在处理消息,消息会处于锁定状态,暂时不在活跃消息列表中。

  • 日志未真实反映执行状态
    当前日志仅打印固定文本,可修改为包含消息内容、队列名称的详细日志,确认代码是否真的执行到发送完成步骤。另外,ServiceBusClient开启logging_enable=True后会生成详细发送日志,去Azure Function的日志面板搜索Service Bus相关条目,查看是否有消息ID、发送回执等关键信息,确认发送操作是否实际执行。

  • Azure Function异步上下文不匹配
    若函数是同步触发类型(如同步HTTP触发),调用异步方法必须用asyncio.run()包裹,否则异步任务无法完成执行:

import asyncio
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    sender = ServiceBusSenderClient("<你的命名空间>", "<队列名>")
    asyncio.run(sender.send_single_message("测试消息"))
    sender.close()
    return func.HttpResponse("消息发送请求已处理")

内容的提问来源于stack exchange,提问作者Nakeuh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:32:45