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

Azure Service Bus配置加载异常:Queues属性始终为Null

问题:Azure Service Bus配置中Queues始终为Null

appsettings.json相关配置段

"AzureServiceBus": {
    "ConnectionString":  "XXXX",
    "Queues": {
      "Name": "DummyMessageQueue",
      "Pub" : true,
      "Sub" : true
    }
  },

问题核心:_serviceBusConfiguration.Queues(原提问误写为Quotes)始终为Null,无法加载对应配置内容。

Program.cs配置代码

最初的配置加载代码:

// 注册Azure Service Bus配置选项
builder.Services.Configure<ServiceBusConfigurationOptions>(
    builder.Configuration.GetSection("AzureServiceBus"));

尝试过以下方法但未解决问题:

  • 添加GetChildren导致编译错误:
builder.Services.Configure<ServiceBusConfigurationOptions>(builder.Configuration.GetSection("AzureServiceBus").GetChildren<List<Queue>>());
  • 使用Bind方法绑定配置:
builder.Services.Configure<ServiceBusConfigurationOptions>(options => builder.Configuration.GetSection("AzureServiceBus").Bind(options));
  • 手动获取配置子节点:
var x = builder.Configuration.GetSection("AzureServiceBus");
x.GetChildren();
builder.Services.Configure<ServiceBusConfigurationOptions>(x);

依赖注入方式

服务构造函数中注入配置的代码:

public MessageReceiver(ILogger<MessageReceiver<T>> logger,
        IOptions<ServiceBusConfigurationOptions> serviceBusConfiguration)
    {
        _logger = logger;
        _serviceBusConfiguration = serviceBusConfiguration.Value;
    }

问题依旧:_serviceBusConfiguration.Queues始终为Null。

实体类定义

public class ServiceBusConfigurationOptions
{
    public string ConnectionString { get; set; }
    public string QueueName { get; set; }
    public List<Queue> Queues { get; set; }
}

public class Queue
{
    public string Name { get; set; }
    public bool Sub { get; set; }
    public bool Pub { get; set; }
}

解决方案

问题根源是配置结构与实体类定义不匹配:
配置文件中Queues是单个对象(用{ ... }包裹),但实体类中Queues被定义为集合类型List<Queue>,导致配置绑定失败,最终值为Null。

两种修复方案任选其一:

  1. 修改配置文件,将Queues改为数组格式(支持多个队列配置):
"AzureServiceBus": {
    "ConnectionString":  "XXXX",
    "Queues": [
      {
        "Name": "DummyMessageQueue",
        "Pub" : true,
        "Sub" : true
      }
    ]
  },
  1. 修改实体类,将Queues改为单个Queue对象(仅支持单个队列配置):
public class ServiceBusConfigurationOptions
{
    public string ConnectionString { get; set; }
    public string QueueName { get; set; }
    public Queue Queues { get; set; } // 从List<Queue>改为Queue类型
}

内容的提问来源于stack exchange,提问作者Linda Lawton - DaImTo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:45:30