深入淺出 RabbitMQ:簡單隊列實戰指南

大家好,我是工藤學編程 🦉一個正在努力學習的小博主,期待你的關注
實戰代碼系列最新文章😉C++實現圖書管理系統(Qt C++ GUI界面版)
SpringBoot實戰系列🐷【SpringBoot實戰系列】SpringBoot3.X 整合 MinIO 存儲原生方案
分庫分表分庫分表之實戰-sharding-JDBC分庫分表執行流程原理剖析
消息隊列深入淺出 RabbitMQ-核心概念介紹與容器化部署

前情摘要:

1、深入淺出 RabbitMQ-核心概念介紹與容器化部署


【親測寶藏】發現一個讓 AI 學習秒變輕松的神站!不用啃高數、不用怕編程,高中生都能看懂的人工智能教程來啦!

👉點擊跳轉,和 thousands of 小伙伴一起用快樂學習法征服 AI,說不定下一個開發出爆款 AI 程序的就是你!


本文章目錄

  • 深入淺出 RabbitMQ:簡單隊列實戰指南
    • 一、什么是RabbitMQ簡單隊列
    • 二、環境準備
    • 三、實戰代碼實現
      • 3.1 消息生產者(Send)
      • 3.2 消息消費者(Recv)
    • 四、關鍵知識點解析
    • 五、測試步驟
    • 六、總結

深入淺出 RabbitMQ:簡單隊列實戰指南

一、什么是RabbitMQ簡單隊列

RabbitMQ作為主流的消息中間件,其核心功能是實現系統間的異步通信。簡單隊列(Simple Queue)是RabbitMQ中最基礎的通信模式,采用"點對點"的消息傳遞方式:一個生產者發送消息到隊列,一個消費者從隊列中獲取消息,適用于簡單的異步通信場景。

二、環境準備

  1. RabbitMQ服務:參考深入淺出 RabbitMQ-核心概念介紹與容器化部署)

同時,為了方便環境之間的隔離(開發、測試、上線),我們需要按照如圖添加一個虛擬環境

在這里插入圖片描述

  1. 依賴配置:在Maven項目中添加AMQP客戶端依賴
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.10.0</version>
</dependency>

三、實戰代碼實現

3.1 消息生產者(Send)

生產者負責創建連接、聲明隊列并發送消息,核心代碼如下:

public class Send {// 隊列名稱(生產者和消費者需使用相同名稱)private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {// 1. 創建連接工廠ConnectionFactory factory = new ConnectionFactory();// 配置連接參數factory.setHost("192.168.229.128");    // 服務器地址factory.setPort(5672);             // 端口(默認5672)factory.setUsername("admin");      // 用戶名factory.setPassword("password");   // 密碼factory.setVirtualHost("/dev");    // 虛擬主機(需提前創建)// 2. 創建連接和信道(使用try-with-resources自動關閉資源)try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {// 3. 聲明隊列(不存在則創建)/*** 參數說明:* 1. queue:隊列名稱* 2. durable:是否持久化(重啟RabbitMQ后隊列依然存在)* 3. exclusive:是否獨占(僅當前連接可訪問,連接關閉后自動刪除)* 4. autoDelete:是否自動刪除(當最后一個消費者斷開后自動刪除)* 5. arguments:額外參數(如隊列長度限制等)*/channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 4. 發送消息String message = "Hello World!";/*** 參數說明:* 1. exchange:交換機名稱(使用默認交換機"")* 2. routingKey:路由鍵(默認交換機下需與隊列名稱一致)* 3. props:消息屬性(如優先級、過期時間等)* 4. body:消息體(字節數組)*/channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));System.out.println(" [x] 已發送消息: '" + message + "'");}}
}

3.2 消息消費者(Recv)

消費者負責監聽隊列并處理消息,核心代碼如下:

public class Recv {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {// 1. 創建連接工廠(配置與生產者一致)ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.229.128");factory.setUsername("admin");factory.setPassword("password");factory.setVirtualHost("/dev");  // 注意:需與生產者使用相同虛擬主機factory.setPort(5672);// 2. 創建連接和信道(消費者通常保持長連接,不使用自動關閉)Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 3. 聲明隊列(與生產者保持一致,確保隊列存在)channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] 等待接收消息中...(按CTRL+C退出)");// 4. 定義消息處理回調Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {// 消費標識(可用于標識當前會話)System.out.println("消費標識: " + consumerTag);// 消息元數據(包含交換機、路由鍵、消息ID等)System.out.println("元數據: " + envelope);// 消息屬性(如發送時間、優先級等)System.out.println("屬性: " + properties);// 消息內容System.out.println("接收內容: " + new String(body, "UTF-8"));}};// 5. 開始消費消息/*** 參數說明:* 1. queue:隊列名稱* 2. autoAck:是否自動確認消息(消費成功后自動通知MQ刪除消息)* 3. consumer:消息處理回調*/channel.basicConsume(QUEUE_NAME, true, consumer);}
}

四、關鍵知識點解析

  1. 連接配置要點

    • 虛擬主機(VirtualHost):用于隔離不同項目的消息隊列,生產者和消費者必須使用相同虛擬主機
    • 端口說明:5672是AMQP協議端口,15672是管理界面端口
  2. 隊列聲明參數

    • 持久化(durable):僅隊列本身持久化,消息需額外設置持久化屬性
    • 獨占性(exclusive):通常用于臨時隊列,生產環境一般設為false
    • 自動刪除(autoDelete):當最后一個消費者斷開后自動清理隊列,適合臨時任務
  3. 消息確認機制

    • 代碼中使用autoAck=true(自動確認):消息被接收后立即從隊列刪除
    • 生產環境建議使用autoAck=false(手動確認):確保消息被正確處理后再刪除,避免消息丟失

五、測試步驟

  1. 啟動RabbitMQ服務:rabbitmq-server start

  2. 訪問管理界面(http://localhost:15672),確認虛擬主機/dev已創建

  3. 先運行消費者(Recv):啟動后進入監聽狀態
    在這里插入圖片描述

  4. 再運行生產者(Send):發送消息后控制臺輸出發送成功
    在這里插入圖片描述

  5. 查看消費者控制臺:成功接收并打印消息詳情
    在這里插入圖片描述

六、總結

通過本文實戰,我們掌握了RabbitMQ簡單隊列的核心用法:

  • 生產者通過信道發送消息到隊列
  • 消費者通過回調函數異步處理消息
  • 虛擬主機和隊列參數的正確配置是通信基礎

簡單隊列適合一對一的消息通信場景,下一篇我們將講解工作隊列(Work Queue),敬請關注!

覺得有用請點贊收藏!
如果有相關問題,歡迎評論區留言討論~

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

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

相關文章

Ubuntu22-Qt Creator-fcitx-中文輸入

fcitx在ubuntu系統中路徑 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/ /usr/lib/x86_64-linux-gnu/qt6/plugins/platforminputcontexts/ fcitx-qt5-1.2.7 編譯 下載鏈接:https://github.com/fcitx/fcitx-qt5/archive/refs/tags/1.2.7.zip Qt版本:Qt C…

【Java基礎|第十三篇】面向對象基礎(三)——繼承(一)繼承的理解,實現,特點……

&#xff08;四&#xff09;面向對象&#xff1a; 5、繼承&#xff1a; &#xff08;1&#xff09;理解&#xff1a; 概念&#xff1a; 繼承是面向對象的三大特征之一 繼承是類與類之間關系的一種&#xff08;是父類與子類的關系&#xff09; 使用場景&#xff1a; 一個類與另…

QGIS綠色版吉林一號切片體驗版插件(Jilin1Tiles)更新

吉林一號更新2024年圖源了但吉林一號切片體驗版插件&#xff08;Jilin1Tiles&#xff09;還沒有更新&#xff0c;我修改了一下代碼&#xff0c;直接集成到QGIS綠色版中。如下&#xff1a;注意&#xff1a;第一次使用的時候需要選中啟用一下插件&#xff1a;需要使用的可以直接下…

git操作命令和golang編譯腳本

git子模塊信息處理命令git init submodule git submodule updategit取消合并 git merge --abort git reset --hard HEAD{1}bat文件生成二進制set GOOSlinux set GOARCHamd64 go env -w GOFLAGS-modvendor go build -ldflags "-w -s" -ohallapiset GOOSlinux set GOAR…

通往L4之路:構建自我進化的智能駕駛決策大腦

摘要&#xff1a; 本文旨在提出一個超越當前主流“感知-預測-規劃”分離式架構的下一代自動駕駛決策系統方案。面對自動駕駛領域最核心的“長尾場景”難題&#xff0c;本文借鑒并升華了一套源于復雜策略制定的決策智能框架&#xff0c;通過構建動態駕駛世界模型&#xff08;Dyn…

AI編程助手:終結996的新希望

引言程序員工作現狀與“996”現象的普遍性AI技術快速發展對編程效率的潛在影響核心問題&#xff1a;AI IDE與AI輔助編程能否改變傳統開發模式AI IDE與AI輔助編程的核心技術AI IDE的定義與功能&#xff08;代碼補全、錯誤檢測、自動重構等&#xff09;AI輔助編程工具&#xff08…

Anthropic 禁止 OpenAI 訪問 Claude API:商業競爭與行業規范的沖突

Anthropic 禁止 OpenAI 訪問 Claude API&#xff1a;商業競爭與行業規范的沖突 文章來源&#xff1a;Poixe AI 本周&#xff0c;美國 AI 公司 Anthropic 宣布禁止 OpenAI 通過 API 訪問其 Claude 系列大模型。這一舉動引發了行業對"友好基準測試"與商業競爭邊界的熱…

區塊鏈 + 物聯網落地案例:供應鏈溯源系統開發全記錄

本文詳細記錄了區塊鏈與物聯網技術融合的供應鏈溯源系統開發全流程。從項目背景出發&#xff0c;闡述傳統供應鏈溯源痛點&#xff0c;介紹系統開發的技術架構設計&#xff0c;包括物聯網數據采集層、區塊鏈數據存儲層等核心模塊&#xff0c;詳解硬件選型、智能合約編寫、數據上…

Windows環境下Intel Fortran如何安裝配置NetCDF

NetCDF(Network Common Data Form)格式,簡稱nc格式,是一種自描述、與平臺無關的二進制數據文件,特別適合多維數據的存儲和交換,廣泛應用于氣象、海洋、地球科學等領域。本文介紹Windows環境下IntelFortran安裝配置NetCDF的過程。 一、系統環境及準備工作 1. 系統 Wind…

tcp/udp的socket特點

tcp &#xff1a; 綁定一個 socket 只是用來監聽&#xff0c;accept 對每個客戶端生成一個 socket 用來維護滑動窗口等。每個客戶端用一個 socket 用來維護滑動窗口等。 4 次揮手對應兩次 close 的 fin 和返回的 ack。 而三次揮手在 connect 里阻塞完成。 ?udp &#xff1a; 雙…

Linux命令top

top一、 命令二、 如何查看top輸出的結果一、 命令 top命令是Linux中的一個實時進程監控工具&#xff0c;類似于windows中的任務管理器。 基本命令 top二、 如何查看top輸出的結果 我們需要分析top輸出的結果 top輸出的結果分為上下兩部分&#xff0c;先看上半部分 第一行是…

Perl 數據庫連接

Perl 數據庫連接 概述 Perl是一種強大的編程語言&#xff0c;廣泛應用于文本處理、系統管理、網絡編程等領域。隨著數據庫技術的快速發展&#xff0c;Perl與數據庫的結合也日益緊密。本文將詳細介紹Perl數據庫連接的相關知識&#xff0c;包括常用的數據庫類型、連接方法以及一些…

jenkins從入門到精通-P1—九五小龐

1. jenkins的兩個核心為CI持續集成 CD持續部署2.jenkins在企業工作中的流程3. 學習的內容包括

第九節 Redis 事務、Redis 腳本

Redis 事務可以一次執行多個命令&#xff0c; 并且帶有以下兩個重要的保證&#xff1a; 事務是一個單獨的隔離操作&#xff1a;事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中&#xff0c;不會被其他客戶端發送來的命令請求所打斷。事務是一個原子操作&#x…

托福閱讀37-2

托福閱讀37-2 1.reinforcement from reintroduction定位到倒數第二句&#xff0c;這里我沒看懂former和term&#xff0c;直接懵掉了&#xff0c;然后往后看。這句話其實省略了&#xff0c;補充完應該是The former is termed reintroduction and the latter is termed reinforce…

docker-compose一鍵部署Springboot+Vue前后端分離項目

1. 背景說明 后端使用JDK8&#xff0c;前端為普通Vue項目前端訪問后端接口&#xff0c;統一帶了前綴/api 2. 項目配置 2.1 后端 yml文件里配置統一訪問前綴/api2.2 前端 API路徑配置為相對路徑&#xff1a;說明&#xff1a;我這邊前后端應用都是部署在同一臺服務器上&#xff0…

Unity_數據持久化_XML基礎

Unity數據持久化 三、XML數據持久化 3.1 XML基礎概念 3.1.1 什么是XML XML&#xff08;eXtensible Markup Language&#xff09;**是一種可擴展的標記語言&#xff0c;用于存儲和傳輸數據。它具有以下特點&#xff1a; 結構化&#xff1a;數據以層次結構組織可讀性&#xff1a;…

大語言模型的解碼策略:貪婪解碼與波束搜索

在自然語言生成任務&#xff08;如機器翻譯、文本摘要、圖像描述等&#xff09;中&#xff0c;語言模型通常會輸出一個詞的概率分布&#xff0c;但模型本身并不會自動告訴你應該選哪些詞作為最終的輸出句子。因此&#xff0c;我們需要設計一個“解碼策略”來從這些概率中生成可…

智慧園區:中小企業的 “減壓閥” 與數字化招商革命

在當前的經濟環境下&#xff0c;中小企業的生存發展面臨著諸多挑戰&#xff0c;其中選址成本儼然成為了創業路上的 “第一道坎”。傳統招商模式中&#xff0c;信息不對稱的問題尤為突出&#xff0c;初創企業常常因此陷入選址失誤的困境。有的企業選在交通不便的地方&#xff0c…

從零開始配置pytorch環境

總結了一下幾篇熱門文章和自己的經驗&#xff0c;方便以后換設備配置環境 一、安裝Anaconda 這一步是為了不污染全局環境&#xff0c;很有必要。 直接清華源鏡像下載&#xff1a;Index of /anaconda/archive/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror 根據自…