如何在.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的后台服务正确启动
验证流程
- 启动本地RabbitMQ服务,确保
rabbitmq://localhost可正常访问 - 启动API项目,确认消费者已连接到
notificationQueue - 运行控制台项目,查看API的控制台输出是否显示消息中的
Event内容
内容的提问来源于stack exchange,提问作者thomsan
相关产品推荐
相关产品推荐

