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

如何在.NET Core 7控制台项目中向MassTransit消费者发送数据

解决控制台项目发送MassTransit消息的问题

要在控制台项目中向API的NotificationRequestConsumer发送消息,按以下步骤修改代码:

1. 确认共享消息契约

保证INotificationRequest接口在控制台和API项目中都能访问(通常通过共享类库引用),契约示例:

namespace Notification;

public interface INotificationRequest
{
    string Event { get; }
}

2. 修改控制台项目的Program.cs

更新代码以启动主机、获取总线实例并发送消息:

using MassTransit;
using Notification;

class Program
{
    static async Task Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();
        await host.StartAsync();

        try
        {
            var bus = host.Services.GetRequiredService<IBus>();

            // 构造符合INotificationRequest契约的消息
            var notificationMessage = new
            {
                Event = "用户注册成功通知"
            };

            // 发送消息到指定队列
            await bus.Send<INotificationRequest>(notificationMessage, context =>
            {
                context.SendToDestination("notificationQueue");
            });

            Console.WriteLine("消息已成功发送");
            await Task.Delay(2000); // 等待消息被消费
        }
        finally
        {
            await host.StopAsync();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddMassTransit(x =>
                {
                    x.UsingRabbitMq((context, config) =>
                    {
                        config.Host(new Uri("rabbitmq://localhost"), h =>
                        {
                            h.Username("guest");
                            h.Password("guest");
                        });
                    });
                });
                // 注册MassTransit托管服务,确保总线正常运行
                services.AddMassTransitHostedService();
            });
}

关键改动点

  • 把Main方法改为异步模式,适配MassTransit的异步API
  • 调用host.StartAsync()/host.StopAsync()管理主机生命周期,确保服务正常初始化
  • 通过依赖注入获取IBus实例,这是发送消息的核心组件
  • 使用bus.Send<T>()方法发送消息,并通过SendToDestination指定目标队列(必须和API中配置的notificationQueue一致)
  • 添加AddMassTransitHostedService(),保证MassTransit的后台服务正确启动

验证流程

  1. 启动本地RabbitMQ服务,确保rabbitmq://localhost可正常访问
  2. 启动API项目,确认消费者已连接到notificationQueue
  3. 运行控制台项目,查看API的控制台输出是否显示消息中的Event内容

内容的提问来源于stack exchange,提问作者thomsan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:25:00