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

本地运行Azure Function读取ServiceBus Topic消息时DeliveryCount报错

解决Azure Function访问ServiceBus消息DeliveryCount抛出异常的问题

常见原因及修复方法

  • 消息未完成接收流程
    Service Bus的消息属性(比如DeliveryCount)只有在消息处于可访问状态时才能读取。如果在函数绑定的参数里直接访问,可能因为消息还处于锁定状态、接收流程未完成导致异常。
    解决办法:改用MessageReceiver手动接收并完成消息后再读取属性,示例代码:

    var receiver = new MessageReceiver("你的ServiceBus连接字符串", "订阅名称", ReceiveMode.PeekLock);
    var message = await receiver.ReceiveAsync();
    if (message != null)
    {
        var count = message.DeliveryCount;
        await receiver.CompleteAsync(message.SystemProperties.LockToken);
    }
    
  • 函数参数类型不匹配
    如果函数参数用的是自定义实体类而非SDK提供的消息类型(比如ServiceBusReceivedMessage或Microsoft.Azure.ServiceBus.Message),会导致属性映射失败,访问DeliveryCount时抛出异常。
    解决办法:将参数类型改为对应SDK的消息类型,示例:

    [FunctionName("TopicListener")]
    public static async Task Run(
        [ServiceBusTrigger("你的主题名", "你的订阅名", Connection = "ServiceBusConnection")]
        ServiceBusReceivedMessage mySbMsg,
        ILogger log)
    {
        var deliveryCount = mySbMsg.DeliveryCount;
        log.LogInformation($"消息投递次数:{deliveryCount}");
        // 消息处理逻辑
    }
    
  • SDK版本兼容性问题
    旧版Service Bus SDK在本地调试时存在属性访问的bug,升级到最新稳定版即可解决。
    解决办法:在NuGet包管理器中更新Azure.Messaging.ServiceBus到最新版本,或者在项目文件中指定版本:

    <PackageReference Include="Azure.Messaging.ServiceBus" Version="7.*" />
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:35:04