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
英文地址,請注明出處:http://en.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 ̄)づ 關注是我更新的動力 ̄︶ ̄? ̄︶ ̄?) 作者會分享更多涉及到各種編程語言的有趣知識!(^?^●)?? 目錄 …