如何使用 MassTransit 在 .NET 中实现消息队列?

来源:这里教程网 时间:2026-02-21 17:27:30 作者:

在 .NET 项目中使用 MassTransit 实现消息队列,核心是通过它来简化与 RabbitMQ 等消息代理的交互。整个过程可以归纳为定义消息、配置总线、创建消费者和发布消息这几个关键步骤。

定义消息契约

消息是服务间通信的数据载体,需要用 C# 类或记录(record)来定义其结构。推荐使用 record 类型,因为它天生不可变,适合作为数据契约。

创建一个专门的 Contracts 文件夹存放消息定义 例如,定义一个简单的消息:public record GettingStarted { public string Value { get; init; } }

安装并配置 MassTransit

首先通过 NuGet 安装必要的包,然后在应用程序启动时配置 MassTransit 服务。

安装两个核心包:MassTransitMassTransit.RabbitMQ Program.cs 的服务注册部分使用 AddMassTransit 方法进行配置 指定使用 RabbitMQ 作为传输层,并设置服务器地址、用户名和密码 调用 ConfigureEndpoints 让 MassTransit 自动根据消费者创建队列和交换机

示例代码片段:

builder.Services.AddMassTransit(busConfigurator =>
{
   busConfigurator.UsingRabbitMq((context, configurator) =>
   {
      configurator.Host("localhost", "/", h =>
      {
         h.Username("guest");
         h.Password("guest");
      });
      configurator.ConfigureEndpoints(context);
   });
});

创建消费者处理消息

消费者是实际处理消息逻辑的组件,需要实现 IConsumer 接口,其中 T 是你定义的消息类型。

创建一个消费者类,例如 GettingStartedConsumer 实现 Consume 方法,在这个方法里编写你的业务逻辑,比如保存数据、调用 API 等 在服务配置中通过 AddConsumer 注册该消费者

MassTransit 会在应用启动时自动监听对应的队列,一旦有消息到达,就会调用消费者的 Consume 方法。

发布和发送消息

生产者服务通过依赖注入获取 IBusIPublishEndpoint 实例来发送消息。

对于事件通知场景,使用 Publish 方法,它基于发布/订阅模式,所有订阅了该消息类型的消费者都会收到消息 对于点对点通信,可以使用 Send 方法直接发送到特定队列

例如,在一个后台服务中:await _bus.Publish(new GettingStarted { Value = "Hello" });

基本上就这些。MassTransit 封装了底层的复杂性,让开发者能更专注于业务逻辑,而不用过多关心连接管理、序列化等细节。

相关推荐