文章目录
- 前言
- 一、核心特性与设计理念
- 二、使用步骤
-
- [1.配置 RabbitMQ 连接(配置文件设置)](#1.配置 RabbitMQ 连接(配置文件设置))
- [2.发送消息(在 Controller 中)](#2.发送消息(在 Controller 中))
- 3.消费消息(后台服务)
- 4.注册托管服务
- 三、消息生命周期控制
- 四、高级用法
-
- [延时队列 & 死信队列](#延时队列 & 死信队列)
- 五、适用场景与优势
- 六、注意事项
- 总结
前言
DeveloperSharp.RabbitMQ 是一个专为.NET开发者设计的高阶封装库,旨在极大简化RabbitMQ的集成与操作流程。它通过抽象底层复杂配置,提供极简API,让开发者无需深入理解AMQP协议细节即可快速实现消息队列功能。
一、核心特性与设计理念
极简API设计
-
仅需掌握三个核心方法即可覆盖大部分消息场景:
- SendMessage:同步发送消息至指定队列。
- GetMessage:从队列获取单条消息(立即返回)。
- UseMessage:持续消费队列消息(长连接模式),通过回调函数处理每条消息。
csharp// 发送消息 RabbitMQHelper.SendMessage("orderQueue", "订单创建:12345"); // 单次获取消息 var msg = RabbitMQHelper.GetMessage("orderQueue").Message; // 持续消费 RabbitMQHelper.UseMessage("orderQueue", message => { ProcessOrder(message); return true; // 确认删除消息 });
二、使用步骤
1.配置 RabbitMQ 连接(配置文件设置)
-
位置要求:配置文件必须位于程序执行目录(如 bin/Debug/netx.x)或项目根目录
-
文件类型 :appsettings.json
csharp{ "DeveloperSharp.RabbitMQ": [{ "HostName": "your-rabbitmq-ip", "VirtualHost": "/", // 可选,默认为 "/" "UserName": "your-user", "Password": "your-password", "Port": 5672 // 默认 5672 }] }
2.发送消息(在 Controller 中)
-
在 API 接口中发送消息到指定队列:
csharpusing DeveloperSharp.RabbitMQ; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace DeveloperSharpRabbitMQSend.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class MessageController : ControllerBase { [HttpPost] public IActionResult SendMessage(string msg) { //同步发送 RabbitMQHelper.SendMessage("orderQueue",msg); // 异步发送(高并发推荐) // await RabbitMQHelper.SendMessageAsync("orderQueue", text); return Ok($"消息已发送:{msg}"); } } }
3.消费消息(后台服务)
-
使用 IHostedService 实现后台持续消费,避免阻塞 API 线程:
csharpusing DeveloperSharp.RabbitMQ; using Microsoft.Extensions.Hosting; namespace DeveloperSharpRabbitMQSend.HostService { public class MyBackgroundService : BackgroundService { private readonly ILogger<MyBackgroundService> _logger; public MyBackgroundService(ILogger<MyBackgroundService> logger) { _logger = logger; } protected override Task ExecuteAsync(CancellationToken stoppingToken) { RabbitMQHelper.UseMessage("orderQueue", message => { try { // 处理消息(如写入数据库) _logger.LogInformation($"收到消息: {message.Message}"); return true; // 确认处理成功,删除消息 } catch { return false; // 处理失败,丢弃消息 // return null; // 重试消息(重新入队) } }); return Task.CompletedTask; } } }
4.注册托管服务
-
代码示例
csharpbuilder.Services.AddHostedService<MyBackgroundService>();
三、消息生命周期控制
- 在UseMessage 回调中通过返回值决定消息去向:
- return true:处理成功,删除消息。
- return false:处理失败,删除消息(可记录日志)。
- return null:消息重新入队,供其他消费者处理。
- 异常抛出:中断消费流程(需进程重启)。
四、高级用法
延时队列 & 死信队列
-
示例:实现消息过期后转入死信队列
- 60秒内未消费 → 消息转入死信队列 → 触发CancelOrder逻辑。
- 60秒后,D盘下生成文件aa.txt,并记录消息。
csharp// 创建过期时间为 60 秒的队列 var orderQueue = RabbitMQHelper.SetQueue("orders_dead", 60000); // 获取死信队列并消费 var deadLetterQueue = RabbitMQHelper.GetQueue("orders_dead"); deadLetterQueue.UseMessage(msg => { File.AppendAllText("D:/aa.txt", msg.Message); return true; }); // 发送订单消息 orderQueue.SendMessage("延时消息");
五、适用场景与优势
- 快速集成:适合中小项目快速引入消息队列,无需搭建复杂架构
- 高并发处理:支持亿级数据量项目
- 跨平台部署:兼容.NET Framework 4.5+ 与 .NET Core 2.0+,支持Docker/Linux/Windows
- 运维简化:自带长连接管理,减少资源泄漏风险(需注意进程销毁)
六、注意事项
- 生产环境安全
- 必须启用SSL/TLS加密传输,避免密码明文暴露
- 避免使用默认guest账号,需按角色分配权限
- 资源冲突规避
- SendMessage/GetMessage/UseMessage务必分离部署(如独立微服务),避免同一进程内资源竞争
- 消息顺序保证
- 异步发送(SendMessageAsync)可能导致消息乱序,需业务层设计幂等处理
总结
DeveloperSharp.RabbitMQ 通过屏蔽RabbitMQ底层复杂性,为.NET开发者提供了一套"开箱即用"的消息队列解决方案。
适合需快速构建异步解耦、流量削峰(如电商秒杀)或跨系统联动的应用场景。对于超大规模集群(日处理亿级以上消息),建议结合原生RabbitMQ集群策略进一步优化