ASP.NET Core集成MassTransit RabbitMQ时出现void无法转IRabbitMqHost错误
问题原因
你使用的是较新版本的MassTransit,IRabbitMqBusFactoryConfigurator的Host()方法已经调整为无返回值(void),旧版本中该方法返回IRabbitMqHost的用法已经失效,所以你尝试将方法返回值赋值给hst变量时就会触发类型转换报错。
修复方案
调整代码逻辑,在Host配置的委托参数中直接捕获host实例即可,修改后的代码如下:
public static class BusConfigurator { public static IBusControl ConfigureBus(Action<IRabbitMqBusFactoryConfigurator, IRabbitMqHost> registrationAction = null) { return Bus.Factory.CreateUsingRabbitMq(cfg => { cfg.Durable = true; cfg.PrefetchCount = 1; cfg.PurgeOnStartup = true; // 提前声明host变量,在Host配置委托中完成赋值 IRabbitMqHost hst = null; cfg.Host(new Uri(Busconstants.RabbitMqUri), hostConfig => { hostConfig.Username(Busconstants.username); hostConfig.Password(Busconstants.password); // 委托参数自带IRabbitMqHost实例,直接赋值给外部变量即可 hst = hostConfig; }); registrationAction?.Invoke(cfg, hst); }); } }
额外注意
- 确保
Busconstants类中的RabbitMqUri格式符合规范,标准格式为rabbitmq://{服务器地址}:{端口}/,RabbitMQ默认端口为5672 - 如果是在ASP.NET Core场景下集成,更推荐直接使用MassTransit官方提供的
AddMassTransit扩展方法完成服务注册,无需自行封装Bus工厂类
内容的提问来源于stack exchange,提问作者pradeep
相关产品推荐
相关产品推荐

