当前位置: 首页 > news >正文

ASP.NET Core Web API 中集成 DeveloperSharp.RabbitMQ

文章目录

  • 前言
  • 一、核心特性与设计理念
    • 极简API设计
  • 二、使用步骤
    • 1.配置 RabbitMQ 连接(配置文件设置)
    • 2.发送消息(在 Controller 中)
    • 3.消费消息(后台服务)
    • 4.注册托管服务
  • 三、消息生命周期控制
  • 四、高级用法
    • 延时队列 & 死信队列
  • 五、适用场景与优势
  • 六、注意事项
  • 总结


前言

DeveloperSharp.RabbitMQ 是一个专为.NET开发者设计的高阶封装库,旨在极大简化RabbitMQ的集成与操作流程。它通过抽象底层复杂配置,提供极简API,让开发者无需深入理解AMQP协议细节即可快速实现消息队列功能。

一、核心特性与设计理念

极简API设计

  • 仅需掌握三个核心方法即可覆盖大部分消息场景:
    • SendMessage:同步发送消息至指定队列。
    • GetMessage:从队列获取单条消息(立即返回)。
    • UseMessage:持续消费队列消息(长连接模式),通过回调函数处理每条消息。
    // 发送消息
    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
    {"DeveloperSharp.RabbitMQ": [{"HostName": "your-rabbitmq-ip","VirtualHost": "/",        // 可选,默认为 "/""UserName": "your-user","Password": "your-password","Port": 5672               // 默认 5672}]
    }
    

2.发送消息(在 Controller 中)

  1. 在 API 接口中发送消息到指定队列:
    using 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.消费消息(后台服务)

  1. 使用 IHostedService 实现后台持续消费,避免阻塞 API 线程:

    using 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.注册托管服务

  • 代码示例
    builder.Services.AddHostedService<MyBackgroundService>();
    

三、消息生命周期控制

  • UseMessage回调中通过返回值决定消息去向:
    • return true:处理成功,删除消息。
    • return false:处理失败,删除消息(可记录日志)。
    • return null:消息重新入队,供其他消费者处理。
    • 异常抛出:中断消费流程(需进程重启)。

四、高级用法

延时队列 & 死信队列

  1. 示例:实现消息过期后转入死信队列
    • 60秒内未消费 → 消息转入死信队列 → 触发CancelOrder逻辑。
    • 60秒后,D盘下生成文件aa.txt,并记录消息。
    // 创建过期时间为 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集群策略进一步优化

http://www.lryc.cn/news/594723.html

相关文章:

  • 关于校准 ARM 开发板时间的步骤和常见问题:我应该是RTC电池没电了才导致我设置了重启开发板又变回去2025年的时间
  • Android NDK ffmpeg 音视频开发实战
  • 什么是“差分“?
  • 包装类简单了解泛型
  • 图片转 PDF三个免费方法总结
  • 支持不限制大小,大文件分段批量上传功能(不受nginx /apache 上传大小限制)
  • 网络设备功能对照表
  • 【Spark征服之路-3.6-Spark-SQL核心编程(五)】
  • Linux 文件操作详解:结构、系统调用、权限与实践
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-134节(SQL——DQL——分组聚合)
  • leetcode-sql-627变更性别
  • 深入解析IP协议:组成、地址管理与路由选择
  • Tomato靶机通关教程
  • 安装docker可视化工具 Portainer中文版(ubuntu上演示,所有docker通用) 支持控制各种容器,容器操作简单化 降低容器门槛
  • 板凳-------Mysql cookbook学习 (十二--------4)
  • 技能学习PostgreSQL中级专家
  • 借助AI学习开源代码git0.7之六write-cache
  • 基于 STM32 的数字闹钟系统 Proteus 仿真设计与实现
  • 从一开始的网络攻防(六):php反序列化
  • 金仓数据库:融合进化,智领未来——2025年数据库技术革命的深度解析
  • STM32 USB键盘实现指南
  • 最严电动自行车新规,即将实施!
  • FreeSwitch通过Websocket(流式双向语音)对接AI实时语音大模型技术方案(mod_ppy_aduio_stream)
  • 朝歌智慧盘古信息:以IMS MOM V6重构国产化智能终端新生态
  • 【初识数据结构】CS61B中的最小生成树问题
  • Car Kit重构车机开发体验,让车载应用开发驶入快车道
  • 【PTA数据结构 | C语言版】拓扑排序
  • OR条件拆分:避免索引失效的查询重构技巧
  • 【web自动化】-5- fixture集中管理和项目重构
  • 2024年ASOC SCI2区TOP,基于Jaya算法的粒子滤波器用于非线性模型贝叶斯更新,深度解析+性能实测