【MQ篇】RabbitMQ之簡單模式!

在這里插入圖片描述

目錄

    • 引言
    • 一、 初識 RabbitMQ 與工作模式
    • 二、 簡單模式 (Simple Queue) 詳解:最直接的“點對點快遞” 📮
    • 三、 Java (Spring Boot) 代碼實戰:讓小兔子跑起來! 🐰🏃?♂?
    • 四、 深入理解:簡單模式的幕后功臣 🕵??♂?
    • 五、 簡單模式的局限性與進階 🤔
    • 六、 總結:簡單而不平凡的開始 🎉

🌟我的其他文章也講解的比較有趣😁,如果喜歡博主的講解方式,可以多多支持一下,感謝🤗!

🌟了解 MQ 請看 : 【MQ篇】初識MQ!

其他優質專欄: 【🎇SpringBoot】【🎉多線程】【🎨Redis】【?設計模式專欄(已完結)】…等

如果喜歡作者的講解方式,可以點贊收藏加關注,你的支持就是我的動力
?更多文章請看個人主頁: 碼熔burning

引言

在分布式系統的世界里,消息傳遞扮演著至關重要的角色。RabbitMQ 作為一款流行的開源消息隊列中間件,以其可靠性、靈活性和易用性贏得了廣大開發者的青睞。在 RabbitMQ 的眾多工作模式中,“簡單模式”(Simple Queue)是最基礎也是最核心的概念。本文將帶你深入了解 RabbitMQ 的簡單模式,通過生動的比喻和詳盡的 Java (Spring Boot) 代碼示例,讓你徹底掌握這只勤勞小兔子的極簡快遞服務!📦??🚶?♀?

RabbitMQ初體驗請看(里面有安裝步驟):【MQ篇】RabbitMQ初體驗!

一、 初識 RabbitMQ 與工作模式

  1. 什么是 RabbitMQ?—— 消息傳遞的“快遞公司” 🏢
    回顧一下我們之前的幽默比喻:RabbitMQ 就像一家高效可靠的“快遞公司”,負責在不同的應用程序(“寄件人”和“收件人”)之間傳遞“包裹”(消息)。它確保消息能夠安全、可靠地送達目的地,而無需應用程序之間直接耦合。👍

  2. RabbitMQ 的工作模式:小兔子的多種“送貨方式” 🚚
    RabbitMQ 提供了多種工作模式,以適應不同的消息傳遞場景。每種模式都像小兔子采用不同的“送貨方式”來應對不同的需求。簡單模式是其中最直接的一種,也是我們理解其他更復雜模式的基礎。🚶?♂?

二、 簡單模式 (Simple Queue) 詳解:最直接的“點對點快遞” 📮

  1. 概念:消息傳遞的“單行道” 🛣?
    簡單模式就像一條單行道,消息從一個生產者直接發送到一個特定的隊列,然后被一個或多個消費者接收和處理。它是 RabbitMQ 中最直接、最基礎的消息傳遞方式。
    在這里插入圖片描述

  2. 角色:快遞服務中的關鍵參與者 🧑?💼📦🧑?💻

    • 生產者 (Producer): 消息的發送者,它創建消息并將其發送到指定的隊列。就像寄件人,打包好“包裹”準備寄出。??
    • 隊列 (Queue): 消息的容器,用于存儲等待被消費者處理的消息。它就像快遞公司的“中轉站” 🏢 或你家門口的“信箱” 📬。
    • 消費者 (Consumer): 消息的接收者,它連接到隊列并從中獲取消息進行處理。就像收件人,等待著接收自己的“包裹”。😊
  3. 工作流程:消息是怎樣“送達”的? 流程圖可以更清晰哦!

    • 連接 (Connect): 生產者和消費者首先需要與 RabbitMQ 服務器建立連接,就像去快遞公司寄件 🚶?♂? 或等待快遞員上門 🚶?♀?。🔗
    • 聲明隊列 (Declare Queue): 生產者和消費者都需要聲明他們將要使用的隊列。如果隊列不存在,RabbitMQ 會創建它。如果隊列已存在,聲明操作不會有任何影響。這就像告訴快遞公司你要寄往哪個地址 📍,或者你住在哪個地址 🏠。
    • 發送消息 (Publish): 生產者創建消息,并將其發送到指定的隊列。在簡單模式下,消息直接投遞到隊列,不需要指定交換機。????📦
    • 接收消息 (Consume): 消費者訂閱指定的隊列,一旦有新消息到達,RabbitMQ 會將消息推送給消費者。👂
    • 處理消息 (Process): 消費者接收到消息后,執行相應的業務邏輯。💻
    • 確認 (Acknowledge): 為了保證消息的可靠性,消費者在成功處理消息后通常會向 RabbitMQ 發送確認。?
  4. 核心特點:簡單、直接、可靠 👍

    • 簡單性: 消息直接從生產者到隊列,再到消費者,沒有復雜的路由規則。 ???
    • 直接性: 生產者明確指定消息要發送到的隊列。 ??📦
    • 可靠性: 通過隊列的存儲和消費者的確認機制,保證消息不會丟失(在適當的配置下)。 安心
  5. 適用場景:簡單任務處理的“直通車” 🚀
    簡單模式適用于對消息傳遞的實時性要求不高,且只需要簡單的一對一或一對多(但每個消息只被一個消費者處理)的任務處理場景,例如:

    • 發送歡迎郵件。📧
    • 處理用戶上傳的文件。 📂
    • 執行簡單的后臺任務。 ??
    • 記錄應用程序日志。 📝

三、 Java (Spring Boot) 代碼實戰:讓小兔子跑起來! 🐰🏃?♂?

接下來,我們通過一個基于 Spring Boot 的 Java 示例,來演示 RabbitMQ 簡單模式的實際應用。

  1. 項目依賴 (pom.xml):
    首先,在你的 pom.xml 文件中引入 Spring AMQP 的依賴:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    
  2. RabbitMQ 連接配置 (application.properties):
    配置 RabbitMQ 的連接信息:

    spring:rabbitmq:host: 寫你部署的主機ip地址port: 5672username: guestpassword: guest
    
  3. 生產者 (MessageSender.java):
    創建一個發送消息的服務組件:

    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;@Service
    public class MessageSender {@Autowiredprivate RabbitTemplate rabbitTemplate;private static final String QUEUE_NAME = "basic.queue"; // 定義隊列名稱 🏷?public void sendMessage(String message) {System.out.println(" [Producer] Sending: " + message + " to " + QUEUE_NAME + " ??📦");rabbitTemplate.convertAndSend(QUEUE_NAME, message);System.out.println(" [Producer] Message sent! ?");}
    }
    
  4. 消費者 (MessageReceiver.java):
    創建一個接收消息的組件:

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;@Component
    public class MessageReceiver {@RabbitListener(queues = "basic.queue") // 監聽 "basic.queue" 隊列 👂public void receiveMessage(String message) {System.out.println(" [Consumer] Received: " + message + " from " + "basic.queue" + " 📥");try {Thread.sleep(1000); // 模擬處理時間 ?} catch (InterruptedException e) {Thread.currentThread().interrupt();}System.out.println(" [Consumer] Done processing: " + message + " 👍");}
    }
    
  5. 啟動和測試 (RabbitmqSimpleDemoApplication.java):
    在你的 Spring Boot 主類中注入 MessageSender 并發送消息:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
    public class RabbitmqSimpleDemoApplication implements CommandLineRunner {@Autowiredprivate MessageSender sender;public static void main(String[] args) {SpringApplication.run(RabbitmqSimpleDemoApplication.class, args);}@Overridepublic void run(String... args) throws Exception {sender.sendMessage("Hello RabbitMQ Simple Mode! 👋");sender.sendMessage("Another Simple Message! 😊");}
    }
    

    運行你的 Spring Boot 應用,你將在控制臺看到生產者發送的消息和消費者接收并處理的消息。🎉
    在這里插入圖片描述

四、 深入理解:簡單模式的幕后功臣 🕵??♂?

  1. 默認交換機 (Default Exchange):
    在簡單模式下,我們并沒有顯式地聲明和使用交換機。實際上,RabbitMQ 存在一個默認的匿名交換機(名稱為空字符串 "")。當我們使用 rabbitTemplate.convertAndSend(queueName, message) 發送消息時,消息會被發送到這個默認交換機,并且路由鍵被自動設置為隊列的名稱。默認交換機會根據路由鍵(即隊列名稱)將消息直接投遞到匹配的隊列。🤫

  2. 隊列的聲明:確保“信箱”存在 📬
    在生產者和消費者端都進行隊列聲明是一個良好的實踐。它可以確保在消息發送和接收之前,隊列已經存在。如果隊列不存在,RabbitMQ 會自動創建它。?

  3. 消費者的確認機制 (Acknowledgement):保障消息可靠性 🛡?
    在 Spring AMQP 中,默認的確認模式是自動確認。這意味著當消息被消費者接收到后,Spring AMQP 會自動向 RabbitMQ 發送確認。然而,在生產環境中,為了保證消息的可靠性,建議配置為手動確認,并在消費者成功處理消息后顯式地發送確認。這可以通過配置 listener.ack-mode 或在代碼中手動發送確認來實現。👍

五、 簡單模式的局限性與進階 🤔

簡單模式雖然簡單易懂,但在一些復雜的場景下可能存在局限性:

  • 耦合性: 生產者需要知道確切的隊列名稱。 🔗
  • 靈活性不足: 無法根據消息的類型或內容進行更靈活的路由。 🗺???📍

為了克服這些局限性,RabbitMQ 提供了其他更高級的工作模式,例如工作隊列模式 👷?♂?👷?♀?、發布/訂閱模式 📢📻、路由模式 🚦??🔍 和主題模式 📰??🔍 等。這些模式引入了交換機和綁定等概念,實現了更靈活和強大的消息路由功能。我們將在后續的文章中逐步探討這些更高級的模式。🚀

六、 總結:簡單而不平凡的開始 🎉

RabbitMQ 的簡單模式以其直觀性和易用性,成為了我們踏入消息隊列世界的良好起點。它就像一只勤勞的小兔子 🐇,默默地將消息從一個地方安全地送到另一個地方。通過本文的講解和代碼示例,相信你已經對 RabbitMQ 的簡單模式有了全面的理解。在掌握了這一基礎之后,讓我們一起期待探索 RabbitMQ 更多精彩的工作模式吧!?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Lua 第7部分 輸入輸出

由于 Lua 語言強調可移植性和嵌入性 &#xff0c; 所以 Lua 語言本身并沒有提供太多與外部交互的機制 。 在真實的 Lua 程序中&#xff0c;從圖形、數據庫到網絡的訪問等大多數 I/O 操作&#xff0c;要么由宿主程序實現&#xff0c;要么通過不包括在發行版中的外部庫實現。 單就…

【開源】STM32HAL庫移植Arduino OneWire庫驅動DS18B20和MAX31850

項目開源鏈接 github主頁https://github.com/snqx-lqh本項目github地址https://github.com/snqx-lqh/STM32F103C8T6HalDemo作者 VXQinghua-Li7 &#x1f4d6; 歡迎交流 如果開源的代碼對你有幫助&#xff0c;希望可以幫我點個贊&#x1f44d;和收藏 項目說明 最近在做一個項目…

【合新通信】浸沒式液冷光模塊與冷媒兼容性測試技術報告

一、測試背景與核心挑戰 行業需求驅動 隨著800G/1.6T光模塊功耗突破30W/端口&#xff0c;傳統風冷已無法滿足散熱需求&#xff0c;浸沒式液冷成為超算/AI數據中心的主流方案。冷媒兼容性是系統可靠性的關鍵指標&#xff0c;涉及材料腐蝕、光學性能、長期穩定性等維度。 核心…

Pandas中的日期時間date處理

Pandas提供了強大的日期和時間處理功能&#xff0c;這對于時間序列分析至關重要。本教程將介紹Pandas中處理日期時間的主要方法。包括&#xff1a; 日期時間數據的創建和轉換日期時間屬性的提取時間差計算和日期運算重采樣和頻率轉換時區處理基于日期時間的索引操作 Pandas中…

Vue3文件上傳組件實戰:打造高效的Element Plus上傳解決方案,可以對文件進行刪除,查看,下載功能。

在現代Web開發中,文件上傳功能是許多應用的核心需求之一。無論是企業管理系統、內容管理系統還是醫療信息系統,上傳附件的功能都至關重要。本文將分享一個基于 Vue3 和 Element Plus 實現的文件上傳組件,結合父子組件的協作,展示如何構建一個功能強大、用戶體驗友好的文件上…

AI 工程師崛起:科技浪潮下的新興力量

在當今科技迅猛發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;無疑是最熱門的領域之一。隨著基礎模型的涌現和開源 / API 的普及&#xff0c;一種新興的職業 ——AI 工程師&#xff0c;正逐漸嶄露頭角。他們在 AI 技術的應用和開發中扮演著關鍵角色&#xff0c;其崛…

人工智能與機器學習:Python從零實現邏輯回歸模型

&#x1f9e0; 向所有學習者致敬&#xff01; “學習不是裝滿一桶水&#xff0c;而是點燃一把火。” —— 葉芝 我的博客主頁&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 歡迎點擊加入AI人工智能社區&#xff01; &#x1f680; 讓我們一起努力&#xff0c;共創…

濟南國網數字化培訓班學習筆記-第二組-5節-輸電線路設計

輸電線路設計 工程設計階段劃分 35kv及以上輸變電工程勘測設計全過程 可行性研究&#xff08;包括規劃、工程選站&#xff09;&#xff08;包括電力系統一次二次&#xff0c;站址選擇及工程設想&#xff0c;線路工程選擇及工程設想&#xff0c;節能降耗分析&#xff0c;環境…

【Linux網絡】TCP服務中IOService應用與實現

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

Linux 怎么找Java程序的監聽的端口

Linux 怎么找Java程序的監聽的端口 1、假設你知道啟動該Java應用的進程ID (PID)&#xff0c;可以通過以下命令查找其監聽的端口&#xff1a; 首先找到該Java應用的PID&#xff1a; ps -ef | grep xxxx-1.0-RELEASE.jar或者&#xff0c;如果你知道啟動命令的一部分&#xff0…

解讀《數據資產質量評估實施規則》:企業數據資產認證落地的關鍵指南

隨著“數據要素市場”建設加速&#xff0c;數據資產逐步成為企業核心資產之一。2024年4月&#xff0c;由中國質量認證中心&#xff08;CQC&#xff09;發布的《數據資產質量評估實施規則》&#xff08;編號&#xff1a;CQC96-831160-2024&#xff09;正式實施&#xff0c;為企業…

[吾愛出品] 【鍵鼠自動化工具】支持識別窗口、識圖、發送文本、按鍵組合等

鍵鼠自動化工具 鏈接&#xff1a;https://pan.xunlei.com/s/VOOhDZkj-E0mdDZCvo3jp6s4A1?pwdfufb# 1、增加的找圖點擊功能&#xff08;不算增加&#xff0c;只能算縫補&#xff09;&#xff0c;各種的不完善&#xff0c;但是能運行。 2、因為受限于原程序的界面&#xff0c;…

【計算機視覺】CV實戰項目 - 基于YOLOv5的人臉檢測與關鍵點定位系統深度解析

基于YOLOv5的人臉檢測與關鍵點定位系統深度解析 1. 技術背景與項目意義傳統方案的局限性YOLOv5多任務方案的優勢 2. 核心算法原理網絡架構改進關鍵點回歸分支損失函數設計 3. 實戰指南&#xff1a;從環境搭建到模型應用環境配置數據準備數據格式要求數據目錄結構 模型訓練配置文…

IntelliJ IDEA 中配置 Spring MVC 環境的詳細步驟

以下是在 IntelliJ IDEA 中配置 Spring MVC 環境的詳細步驟&#xff1a; 步驟 1&#xff1a;創建 Maven Web 項目 新建項目 File -> New -> Project → 選擇 Maven → 勾選 Create from archetype → 選擇 maven-archetype-webapp。輸入 GroupId&#xff08;如 com.examp…

基于javaweb的SpringBoot+MyBatis通訊錄管理系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

EFISH-SBC-RK3588無人機地面基準站項目

一、核心技術組件解析 1. EFISH-SBC-RK3588 性能優勢&#xff1a;作為瑞芯微推出的高性能處理器&#xff0c;采用8nm 工藝&#xff0c;搭載ARM Cortex-A76/A55 八核架構&#xff0c;集成強大的 NPU&#xff08;神經網絡處理單元&#xff09;和 GPU&#xff08;圖形處理器&…

藍橋杯 4. 卡片換位

卡片換位 原題目鏈接 題目描述 你玩過華容道的游戲嗎&#xff1f; 這是一個類似的&#xff0c;但更簡單的游戲。 看下面的 3 2 格子&#xff1a; --------- | A | * | * | --------- | B | | * | ---------在其中放置了 5 張牌&#xff0c;其中&#xff1a; A 表示關…

7.Excel:單元格格式

一 案例 1.案例1 2.案例2 3.案例3 二 三種基本數據類型 補充&#xff1a;在沒有任何格式的情況下是這樣對齊的。 1.文本 默認左對齊&#xff0c;文本不可參與計算。 2.數值 默認右對齊&#xff0c;數值計算精度是15位。 若超出15位&#xff0c;超出部分顯示為0。 3.邏輯值 …

高效DCDC電源芯片在運動控制器中的應用:設計考量、性能評估與可靠性分析

摘要 隨著工業自動化的深入推進&#xff0c;運動控制器作為自動化系統的核心組件&#xff0c;對電源芯片的性能提出了極高要求。高效率DCDC電源芯片憑借其卓越的電能轉換效率、優異的負載響應特性和高功率密度&#xff0c;在運動控制器領域得以廣泛應用。本文以國科安芯的ASP3…

Action:Update your application‘s configuration

在使用Maven項目時&#xff0c;有一個報錯信息是&#xff1a;Update your applications configuration 這類問題&#xff0c;就是我們的application.yml文件 或者 application.properties文件 內容哪里寫錯了 最有可能就是對齊方式有問題