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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:24:02