C#怎么连接RabbitMQ C#使用MassTransit操作RabbitMQ教程

冬杰大大_2638

冬杰大大_2638

2026-01-21

911人浏览

原创

推荐使用 MassTransit 连接 RabbitMQ,它提供自动连接管理、重连、序列化和消费者生命周期处理;需安装 MassTransit 和 MassTransit.RabbitMQ 包,配置 Host、vhost 与凭证,定义消息契约、发布端 IPublishEndpoint 和 IConsumer 实现类,并注册消费者队列。

c#怎么连接rabbitmq c#使用masstransit操作rabbitmq教程

用 C# 连接 RabbitMQ,推荐直接使用 MassTransit —— 它不是简单的封装,而是成熟的分布式消息通信框架,内置对 RabbitMQ 的深度支持,自动处理连接管理、重连、序列化、消费者生命周期等细节,比手写 Raw RabbitMQ.Client 更安全、更省心。

安装 MassTransit 和 RabbitMQ 客户端依赖

在项目中通过 NuGet 安装两个核心包:

  • MassTransit(主框架)
  • MassTransit.RabbitMQ(RabbitMQ 传输适配器)

命令行执行:

dotnet add package MassTransit<br>dotnet add package MassTransit.RabbitMQ

注意:无需单独安装 RabbitMQ.Client,MassTransit.RabbitMQ 已包含兼容版本。

配置 MassTransit 服务(.NET 6/7/8 推荐方式)

在 Program.cs 中注册 MassTransit,并指定 RabbitMQ 连接地址和虚拟主机:

builder.Services.AddMassTransit(x =><br>{<br>    x.UsingRabbitMq((context, cfg) =><br>    {<br>        cfg.Host("localhost", "/", h =><br>        {<br>            h.Username("guest");<br>            h.Password("guest");<br>        });<br>        // 可选:启用自动交换/队列声明<br>        cfg.ConfigureEndpoints(context);<br>    });<br>});

说明:
– "localhost" 是 RabbitMQ 服务地址,生产环境换成实际 IP 或域名
– "/" 是虚拟主机(vhost),默认为 "/",如已创建自定义 vhost(如 "myapp")请替换
– 用户名密码默认是 guest/guest,生产务必修改并配置权限

定义消息契约与发送消息

消息必须是 public class,推荐实现空接口标记(非必须但利于类型识别):

public record OrderSubmitted<br>{<br>    public Guid OrderId { get; init; }<br>    public string CustomerName { get; init; } = default!;<br>}

在业务代码中注入 IPublishEndpoint 发布事件:

seo-keyword-analyzer
seo-keyword-analyzer

分析关键词进行SEO优化;研究搜索量、竞争程度和排名难度;生成关键词建议、内容创意及优化建议。

下载
public class OrderService<br>{<br>    private readonly IPublishEndpoint _publishEndpoint;<br><br>    public OrderService(IPublishEndpoint publishEndpoint)<br>        => _publishEndpoint = publishEndpoint;<br><br>    public async Task SubmitOrder(Guid orderId, string name)<br>    {<br>        await _publishEndpoint.Publish(new OrderSubmitted<br>        {<br>            OrderId = orderId,<br>            CustomerName = name<br>        });<br>    }<br>}

发布即发往默认交换机(amq.topic),MassTransit 自动路由到匹配的消费者队列。

编写消费者接收并处理消息

新建一个类实现 IConsumer:

public class OrderSubmittedConsumer : IConsumer<ordersubmitted><br>{<br>    public async Task Consume(ConsumeContext<ordersubmitted> context)<br>    {<br>        var message = context.Message;<br>        Console.WriteLine($"收到订单: {message.OrderId} - {message.CustomerName}");<br><br>        // 模拟处理逻辑(如保存数据库、调用下游服务)<br>        await Task.Delay(100);<br><br>        // 处理成功,自动 ACK;抛出异常则 NACK 并可能进入重试或死信队列<br>    }<br>}</ordersubmitted></ordersubmitted>

注册消费者(仍在 AddMassTransit 配置块内):

x.AddConsumer<ordersubmittedconsumer>();</ordersubmittedconsumer>

并在 ConfigureEndpoints 前加上:

cfg.ReceiveEndpoint("order-queue", e =><br>{<br>    e.ConfigureConsumer<ordersubmittedconsumer>(context);<br>});</ordersubmittedconsumer>

这样 MassTransit 就会创建名为 order-queue 的队列,绑定到默认交换机,监听 OrderSubmitted 类型消息。

基本上就这些。MassTransit 把 RabbitMQ 的复杂性屏蔽得很好,你专注定义消息和业务逻辑即可。不复杂但容易忽略的是:确保 RabbitMQ 服务已启动、vhost 存在、用户有对应权限,以及开发时打开管理界面(http://localhost:15672)实时观察队列和消息流动,排查问题快得多。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

word 路由 c#

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

664

5

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

2026.01.28

1108

20

RabbitMQ使用教程合集
RabbitMQ使用教程合集

RabbitMQ使用教程合集整理 RabbitMQ 基础教程、消息队列开发案例、生产者消费者、交换机与队列实战内容。

2026.05.20

204

15

RabbitMQ集群部署指南
RabbitMQ集群部署指南

RabbitMQ集群部署指南聚合 RabbitMQ 集群部署、高可用架构、镜像队列、故障恢复、监控与运维优化内容。

2026.05.20

137

12

RabbitMQ Docker实战指南
RabbitMQ Docker实战指南

RabbitMQ Docker实战指南提供 RabbitMQ Docker 镜像部署、Docker Compose、Kubernetes Operator 与云原生实践教程。

2026.05.20

162

10

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2133

5

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.07

3474

5

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3208

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

5229

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习