.NET6配置MassTransit Azure ServiceBus时遇AddMassTransit重复调用异常
可能的原因
模块重复注册
你使用的DigitalConsultantsDataServicesModule实现了IServicesModule,如果这个模块在服务注册流程中被多次添加(比如Program.cs里重复调用AddModule<DigitalConsultantsDataServicesModule>()),会导致ConfigureServices方法多次执行,每次都调用AddMassTransit,触发重复调用异常。第三方组件自动配置MassTransit
项目中引用的某些NuGet包或框架可能已经自动集成并调用了AddMassTransit。比如部分领域驱动框架、事件总线封装库,会在你不知情的情况下完成MassTransit的基础配置。其他位置已配置MassTransit
检查Program.cs或其他启动类、扩展方法,可能在项目的其他模块里已经调用过AddMassTransit,只是你没注意到。
解决方法
检查模块注册次数
查看Program.cs中模块注册的代码,确保DigitalConsultantsDataServicesModule只被注册一次,避免重复执行ConfigureServices。排查第三方依赖
查看项目的NuGet包列表,检查是否有依赖MassTransit的包,查阅其文档或源码确认是否存在自动注册逻辑。合并MassTransit配置
如果确认其他位置已调用过AddMassTransit,将Azure ServiceBus的配置合并到已有调用中,不要重复调用AddMassTransit。示例代码:
services.AddMassTransit(x => { // 保留原有配置(如消费者定义等) x.UsingAzureServiceBus((context, cfg) => { var connectionString = context.GetService<IConfiguration>().GetValue<string>("ServiceBus"); cfg.Host(connectionString); }); });
- 调试追踪调用来源
在DigitalConsultantsDataServicesModule的ConfigureServices方法内打断点,查看调用栈,确认方法被调用的次数和触发来源,直接定位重复调用的根源。
内容的提问来源于stack exchange,提问作者Laura Díaz

