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.pswp.cn/pingmian/89884.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Flutter运行android提示Deprecated imperative apply of Flutter‘s Gradle plugins

文章目录 出现场景 解决方案 编辑android/settings.gradle 编辑android/build.gradle 重新定义库变量 编辑android/app/build.gradle 删除fluttetRoot和plugin字段 添加plugins块 修改dependencies 出现场景 ado@adodeMacBook-Air app_demo % flutter run --profile Launching…

音视频重回顾及nat内网穿透相关再整理笔记

以前系统得粗略对音视频有过技术栈基类&#xff0c;现在重新回顾。 除此之外&#xff0c;最近刚好实现一个双网卡加入内网的测试方案&#xff0c;涉及内网穿透的知识&#xff0c;刚好对内网穿透逻辑进行整理。 1&#xff1a;明确相关基础知识&#xff0c;解惑体系架构。2&#…

深入理解 SemaphoreSlim 在.NET Core API 开发中的应用

目录 什么是 SemaphoreSlim SemaphoreSlim 的核心方法 构造函数 等待方法 释放方法 基本使用模式 同步使用模式 异步使用模式&#xff08;推荐在 API 中使用&#xff09; 在 Web 开发中的常见用途 1. 限制 API 接口的并发请求数 2. 保护共享资源的并发访问 3. 控制…

板凳-------Mysql cookbook学习 (十二--------4)

11.0 概述 386 11.1 使用LOAD DATA和mysqlimport导入数据 390 首先创建 mytbl_3 表&#xff08;结构与 mytbl 相同&#xff09;&#xff1a;sql CREATE TABLE mytbl_3 LIKE mytbl;用文本编辑器&#xff08;如 Notepad&#xff09;打开 mytbl.txt&#xff0c;确保格式转换成wind…

【Git#6】多人协作 企业级开发模型

一、多人协作 1. 同一分支下的协作 目前&#xff0c;我们所完成的工作如下&#xff1a; 基本完成 Git 的所有本地库的相关操作&#xff0c;git基本操作&#xff0c;分支理解&#xff0c;版本回退&#xff0c;冲突解决等等申请码云账号&#xff0c;将远端信息clone到本地&…

C# 中的强大运算符

C# 中鲜为人知的强大运算符 C# 还提供了一些"冷门"但功能强大的运算符&#xff0c;这些运算符在特定场景下能极大简化代码并提高效率。 1. 空合并赋值运算符 ?? // 传统写法 if (variable null) {variable defaultValue; }// 使用 ?? variable ?? defaultVal…

用window字体替换zabbix 默认的字体

我们先需要在windows系统下的C:\Windows\Fonts目录&#xff0c;找到一个喜欢的字体&#xff0c;我选择的是微软雅黑。复制到其它路径下&#xff0c;选取一个msyh.ttc。到服务器上。要把msyh.ttc改为msyh.ttf才可以。不然最后中英文都不显示[roothadoop105.yinzhengjie.com ~]# …

MySQL 17 如何正确地显示随机消息?

假设有一个场景&#xff0c;一个英语学习APP首页有一个随机显示单词的功能&#xff0c;用户每次访问首页的时候&#xff0c;都会随机滚动显示三个单词。 已知表里有10000条记录&#xff0c;来看看随机选择3个单词有什么方法&#xff0c;又存在什么问题。 建表语句&#xff1a…

7-Zip 曝出两个可导致拒绝服务的中危漏洞

研究人员在全球使用最广泛的开源文件压缩软件7-Zip中新发现两个漏洞&#xff08;CVE-2025-53816和CVE-2025-53817&#xff09;。这两个漏洞影响7-Zip 25.0.0之前的所有版本&#xff0c;虽然不能实现远程代码执行&#xff0c;但可能引发内存损坏和拒绝服务&#xff08;Denial of…

史上最简单Conda+Ollama+Open-Webui安装方法!

史上最简单CondaOllamaOpen-Webui安装方法 一、安装Anaconda 1、到Anaconda官网下载conda_24.10.1 链接&#xff1a;https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Windows-x86_64.exe 2.双击安装包&#xff0c;开始安装 选择All Users 切记安装路径不要选C盘&am…

Python-数据库概念-pymysql-元编程-SQLAlchemy-学习笔记

序 欠4前年的一份笔记 &#xff0c;献给今后的自己。 数据库 概念 数据库&#xff1a;按照数据结构来组织、存储、管理数据的仓库。 诞生 计算机的发明是为了做科学计算的&#xff0c;而科学计算需要大量的数据输入和输出。 早期&#xff0c;可以使用打孔卡片的孔、灯泡的亮灭来…

Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上

借助 U 盘或 TF 卡拷贝程序到开发板上我们已经学习了怎么在 ubuntu 和 windows 上互传文件&#xff0c;那么怎么把 ubuntu 或 win 上的程序拷贝到开发板呢&#xff0c;这里给大家介绍第一种方法&#xff0c;使用 U 盘或者 TF 卡来完成&#xff0c;如果大家使用的是 U 盘&#x…

【亲测有效】防检测插件playwright_stealth 2.X版本快速使用

这里写自定义目录标题核心方法apply_stealth_syncuse_sync和use_async一. playwright_stealth 2.0以上版本1.同步方法2.异步方法3.实例二.playwright_stealth 2.0以下版本playwright-stealth 是一个用于 Playwright 的库&#xff0c;旨在帮助自动化脚本避开一些检测机制&#x…

docker安装与简单项目上手

1.docker安装 系统版本为almalinux9.6 首先添加一下docker的软件安装源&#xff08;源选择的阿里云&#xff0c;只要是rhel的系统都适用&#xff0c;无论是rockylinux还是almalinux还是红帽企业版&#xff09; dnf config-manager --add-repo https://mirrors.aliyun.com/doc…

计算机网络基础:从协议到通信全解析(大致框架)

本节重点&#xff1a;1.了解网络发展背景&#xff0c;对局域网/广域网的概念有基本认识2.了解网络协议的意义&#xff0c;重点理解TCP/IP五层结构模型3.学习网络传输的基本流程&#xff0c;理解封装和解包分用一、计算机网络发展背景&#xff1a;人与人之间是需要协同工作的&am…

PDF 编辑器:多文件合并 拆分 旋转 顺序随便调 加水印 密码锁 页码背景

各位打工人、学生党们&#xff0c;你们是不是也遇到过这种情况&#xff0c;领导甩来一个PDF让你改&#xff0c;结果你捣鼓半天&#xff0c;发现这玩意儿根本动不了&#xff0c;简直想原地爆炸&#xff01;别急别急&#xff0c;今天就给你们安利一个办公软件——PDF编辑器&#…

【软件基础学习配置那些事 4-3】3ds Max2026 菜单栏常用命令-----文件、视图、编辑、工具、组

3ds Max学习的笔记小知识&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;后续都会补充添加&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;个人的一些学习笔记&#xff0c;如有不对&#xff0c;欢迎订正&am…

网络爬虫的介绍

网络爬虫库网络爬虫通俗来讲就是使用代码将HTML网页的内容下载到本地的过程。爬取网页主要是为了获取网中的关键信息&#xff0c;例如网页中的数据、图片、视频等。Python语言中提供了多个具有爬虫功能的库&#xff0c;下面将具的介绍。urlib库:是Python自带的标准库&#xff0…

C# 编程实战进阶:字符串与字符串数组 (3)

目录 1、给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 2、无重复字符的最长字符串 &#xff0c;给定一个字符串 s 请你找出其中不含有重复字符的最长字符串的长度。 3、给定两个字符串 s 和 t &#xff0c;它们只包含小…

Python趣味算法:百钱百鸡问题——双重循环优化与算法效率分析

如何用Python解决中国古代数学难题?本文从暴力枚举到高效优化,带你领略算法之美,效率提升100倍! 看在每天坚持分享有趣知识的份上,点个关注吧(づ ̄ 3 ̄)づ 关注是我更新的动力 ̄︶ ̄∗ ̄︶ ̄∗) 作者会分享更多涉及到各种编程语言的有趣知识!(^∀^●)ノシ 目录 …