MassTransit配置RabbitMQ Host报错:无3参数重载方法
问题原因及解决方案
你的问题出在MassTransit v8.x 已移除了Host(string host, string virtualHost, Action<IRabbitMqHostConfigurator> configure)这个重载方法,你参考的文档写法对应v7及更早版本,不适用于v8.3.0。
以下是v8.x版本的正确配置方式:
方式一:通过配置器设置虚拟主机
直接在Host配置委托中指定虚拟主机,这是v8推荐的写法:
x.UsingRabbitMq((context, cfg) => { cfg.Host(builder.Configuration["RabbitMq:Host"], host => { host.VirtualHost("/"); // 在这里设置虚拟主机 host.Username(builder.Configuration.GetValue("RabbitMq:Username", "guest")); host.Password(builder.Configuration.GetValue("RabbitMq:Password", "guest")); }); cfg.ConfigureEndpoints(context); });
方式二:使用Uri指定完整主机地址
将虚拟主机包含在Uri中,一次性传入Host方法:
x.UsingRabbitMq((context, cfg) => { var rabbitMqUri = new Uri($"rabbitmq://{builder.Configuration["RabbitMq:Host"]}/"); cfg.Host(rabbitMqUri, host => { host.Username(builder.Configuration.GetValue("RabbitMq:Username", "guest")); host.Password(builder.Configuration.GetValue("RabbitMq:Password", "guest")); }); cfg.ConfigureEndpoints(context); });
方式三:使用完整连接字符串
如果配置文件中存储了完整的RabbitMQ连接字符串(格式如rabbitmq://username:password@host/vhost),可以直接传入:
x.UsingRabbitMq((context, cfg) => { cfg.Host(builder.Configuration["RabbitMq:ConnectionString"]); cfg.ConfigureEndpoints(context); });
内容的提问来源于stack exchange,提问作者Ulad Shuhayeu
相关产品推荐
相关产品推荐

