MassTransit v7.2.2消息已发送但Consumer无法消费问题求助
问题根因
核心错误是消费者注册顺序晚于总线配置逻辑,ConfigureEndpoints执行时无法扫描到未注册的消费者,不会为其创建对应的接收端点,导致消息发送后没有消费入口被直接丢弃。
修正步骤
- 调整消费者注册顺序,将
AddConsumer放到总线配置前,保证ConfigureEndpoints可以正常发现消费者 - 移除重复的Mediator消费者注册,如果没有使用Mediator的场景可直接删除Mediator相关配置,避免逻辑混淆
- 无需额外显式调用
busControl.Start(),AddMassTransitHostedService会自动托管总线的启动/停止生命周期
修正后核心代码
var hostBuilder = Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddMassTransit(mt => { // 先注册消费者,再配置总线 mt.AddConsumer<TheMessageConsumer>(); mt.AddBus(provider => Bus.Factory.CreateUsingInMemory(cfg => { cfg.UseInMemoryOutbox(); // 此时已经注册了消费者,可自动生成对应的接收端点 cfg.ConfigureEndpoints(provider); })); // 没有用到Mediator可删除这段配置 // services.AddMediator(cfg => // { // cfg.AddConsumer<TheMessageConsumer>(); // }); }); services.AddMassTransitHostedService(); }); var host = hostBuilder.Build(); var message = new TheMessage() { Message = $"<Message-{DateTime.Now.ToLongTimeString()}>" }; var bus = host.Services.GetRequiredService<IBus>(); Console.WriteLine($"Sending: {message.Message}"); await bus.Publish(message); host.Run();
内容的提问来源于stack exchange,提问作者Brendan Grant
相关产品推荐
相关产品推荐

