RabbitMQ 的專業術語

術語定義示例/說明
生產者(Producer)發送消息到 RabbitMQ 的客戶端應用程序。日志系統將錯誤信息發送到 RabbitMQ。
消費者(Consumer)從 RabbitMQ 隊列中接收并處理消息的客戶端應用程序。一個訂單處理服務從隊列中讀取消息并更新數據庫。
Broker(消息代理)RabbitMQ 服務器,負責接收、存儲和轉發消息。RabbitMQ 服務實例,負責管理隊列、交換器和路由規則。
隊列(Queue)存儲消息的容器,消費者從隊列中消費消息。一個名為?order_queue?的隊列存儲待處理的訂單消息。
交換器(Exchange)接收消息并根據路由規則轉發到隊列的組件,有四種類型:fanout、direct、topic、headers。Direct Exchange:根據精確路由鍵匹配隊列;Fanout Exchange:廣播消息到所有綁定隊列。
路由鍵(Routing Key)生產者發送消息時指定的字符串,用于交換器匹配隊列。發送日志消息時使用?error?作為路由鍵,匹配綁定到?error?的隊列。
綁定(Binding)將隊列與交換器關聯的規則,定義消息路由路徑。隊列?queue_a?綁定到?exchange_1,綁定鍵為?user.create
信道(Channel)單個連接內部的虛擬連接,用于發送和接收消息。生產者通過一個連接創建多個信道,每個信道處理不同的任務(如發送不同消息)。
消息(Message)由消息頭(屬性)和消息體(數據)組成的傳輸單元。消息頭包含?routing_keypriority,消息體是 JSON 格式的訂單數據。
虛擬主機(Virtual Host)邏輯隔離的 RabbitMQ 環境,不同虛擬主機下的交換器和隊列互不干擾。開發環境使用?/dev,生產環境使用?/prod?的虛擬主機。
AMQP高級消息隊列協議,RabbitMQ 實現的標準化消息傳輸協議。定義了客戶端與 Broker 通信的規則,如消息格式、傳輸方式等。
消息確認(Ack)消費者處理完消息后向 Broker 發送確認,避免消息丟失。消費者處理訂單后發送?basicAck,Broker 刪除消息;未確認則重新入隊。
持久化(Durable)隊列或消息的持久化配置,確保 Broker 重啟后數據不丟失。聲明隊列時設置?durable: true,消息發送時使用?delivery_mode: 2
工作隊列(Work Queue)通過多消費者分擔負載,實現任務分配和負載均衡。10 個消費者并行處理隊列中的消息,提高吞吐量。
發布/訂閱(Pub/Sub)通過 Fanout Exchange 實現消息廣播,所有綁定隊列均接收消息。系統通知發送到所有訂閱者(如多個監控服務)。
路由模式(Direct、Topic 等)交換器根據路由鍵的匹配規則路由消息。Topic Exchange:路由鍵?user.*?匹配?user.create?和?user.delete
Prefetch Count消費者預取消息的數量,控制消息分配公平性。設置?prefetch_count=1,確保消費者處理完一條消息后再獲取下一條。
集群(Cluster)多個 RabbitMQ 節點組成的高可用架構,實現負載均衡和故障轉移。三個節點組成集群,提供冗余和擴展能力。

術語分類說明

  1. 核心組件

    • 生產者、消費者、Broker、隊列、交換器、信道、虛擬主機。
  2. 路由相關

    • 路由鍵、綁定、交換器類型(Direct/Fanout/Topic/Headers)、路由模式。
  3. 高級特性

    • 持久化、消息確認(Ack)、負載均衡(Prefetch Count)、集群。
  4. 協議與標準

    • AMQP、消息結構(頭+體)。

使用場景示例


2. 消費者(Consumer)

實際應用
消費者從隊列中消費消息并處理。常用于后臺任務處理。
示例


3. 隊列(Queue)

實際應用
隊列是消息的存儲和中轉容器,用于解耦生產者和消費者。
示例


4. Exchange(交換器)

實際應用
交換器根據類型和路由規則分發消息。
示例


5. Routing Key(路由鍵)

實際應用
路由鍵是生產者指定的規則,用于匹配 Exchange 的路由邏輯。
示例


6. Binding(綁定)

實際應用
綁定定義 Exchange 和 Queue 的關聯規則。
示例


7. 持久化(Durable)

實際應用
確保 Broker 重啟后消息不丟失。
示例


8. 消息確認(Ack)

實際應用
消費者處理完消息后發送確認,避免重復消費。
示例


9. 工作隊列(Work Queue)

實際應用
通過多消費者分擔負載,提升處理能力。
示例


10. 發布/訂閱(Pub/Sub)

實際應用
通過 Fanout 或 Topic Exchange 實現消息廣播。
示例


11. 虛擬主機(Virtual Host)

實際應用
隔離不同環境或團隊的資源。
示例


12. 集群(Cluster)

實際應用
實現高可用和負載均衡。
示例


13. Prefetch Count

實際應用
控制消費者消息拉取數量,避免資源過載。
示例


14. AMQP 協議

實際應用
標準化的消息格式和傳輸規則,支持多語言客戶端。
示例


15. 路由模式(Direct/Topic 等)

實際應用
根據業務需求選擇路由策略。
示例


16. 負載均衡

實際應用
通過競爭消費者模型分發任務。
示例

17. 分布式事務

實際應用
通過消息隊列實現最終一致性。
示例


18. 消息重復處理

實際應用
處理 "At Least Once" 場景下的重復消息。
示例


以上術語的實際應用覆蓋了 RabbitMQ 的核心場景,包括:


  • Direct Exchange
    生產者發送 Routing Key = "error",綁定到 Binding Key = "error" 的隊列會收到消息。

  • Topic Exchange
    路由鍵 *.urgent 可匹配 email.urgentsms.urgent 等消息。

  • Fanout Exchange
    所有綁定隊列均收到同一消息,適用于系統通知廣播。

  • 1. 生產者(Producer)

    實際應用
    生產者是發送消息的客戶端程序,通常用于異步任務觸發。
    示例

  • 電商下單場景:用戶提交訂單后,訂單服務作為生產者,將訂單信息發送到 RabbitMQ 隊列(如?orders_queue),通知庫存服務扣減庫存。
  • 日志系統:日志服務將錯誤日志(如?Routing Key: error)發送到 Exchange,由綁定的隊列處理。
  • 庫存扣減:庫存服務作為消費者,從?orders_queue?中獲取訂單消息,執行庫存扣減操作。
  • 郵件發送:郵件服務消費者從?email_queue?中讀取消息,異步發送郵件,避免阻塞前端響應。
  • 流量削峰:在電商大促期間,將用戶請求存入?order_queue,由多個消費者分批次處理,避免數據庫崩潰。
  • 日志收集:日志消息存入?logs_queue,多個消費者并行處理日志分析任務。
  • Direct Exchange
    • 場景:日志系統按嚴重程度分類。
    • 綁定規則
      • 隊列?error_queue?綁定?error?路由鍵。
      • 隊列?warning_queue?綁定?warning?路由鍵。
    • 效果:發送?Routing Key: error?的消息只會到?error_queue
  • Fanout Exchange
    • 場景:系統通知廣播。
    • 綁定規則:所有監控服務隊列綁定同一個?alert_exchange
    • 效果:服務器異常消息會被所有監控隊列接收。
  • Topic Exchange
    • 場景:訂單狀態變更通知。
    • 綁定規則
      • 隊列?order_paid?綁定?order.#.paid
      • 隊列?order_shipped?綁定?order.#.shipped
    • 效果:發送?Routing Key: order.123.paid?的消息會被?order_paid?隊列接收。
  • 訂單狀態更新
    • 生產者發送?Routing Key: order.create,綁定到?order_queue
    • 發送?Routing Key: order.update,綁定到?inventory_queue
  • 日志分級
    • 使用?errorwarninginfo?作為路由鍵,分別路由到不同隊列。
  • 發布/訂閱模式
    • 多個隊列(如?monitor1,?monitor2)綁定到同一個?alert_exchange,實現消息廣播。
  • 工作隊列分發
    • 隊列?worker1?和?worker2?綁定到?task_exchange,根據路由鍵分配任務。
  • 關鍵業務隊列:設置隊列?durable: true,消息?delivery_mode: 2(持久化)。
  • 訂單隊列:電商訂單隊列必須持久化,避免服務器宕機導致訂單丟失。
  • 庫存扣減
    • 消費者處理訂單后調用?basicAck,Broker 刪除消息。
    • 若處理失敗未確認,消息會重新入隊,防止丟失。
  • 網絡異常
    • 若消費者處理時斷開,未確認的消息會被重新投遞。
  • 文件處理
    • 生產者將圖片上傳任務發送到?image_process_queue
    • 10 個消費者并行處理,縮短用戶等待時間。
  • 系統監控
    • 多個監控服務(如日志分析、告警服務)訂閱同一個?alert_exchange,實時接收服務器異常消息。
  • 環境隔離
    • 開發環境使用?/dev?虛擬主機,生產環境使用?/prod,避免配置沖突。
  • 多租戶系統
    • 每個租戶分配獨立的虛擬主機,確保消息隊列互不干擾。
  • 電商大促
    • 3 個 RabbitMQ 節點組成集群,分擔負載,單節點故障時自動切換,確保服務不中斷。
  • 資源受限的消費者
    • 設置?prefetch_count=1,確保消費者處理完一條消息后再獲取下一條,避免內存溢出。
  • 跨語言系統
    • Java 生產者發送消息到 RabbitMQ,Python 消費者通過?pika?庫接收并處理。
  • 訂單狀態通知
    • 使用?Topic Exchange,路由鍵?order.#.paid?匹配所有?order.*.paid?的消息,如?order.123.paidorder.456.paid
  • 微服務實例
    • 訂單服務部署 3 個容器,每個容器作為消費者從?order_queue?獲取消息,RabbitMQ 自動分配,確保負載均衡。
  • 訂單與庫存
    1. 訂單服務創建訂單后,發送消息到?inventory_queue
    2. 庫存服務消費消息扣減庫存。
    3. 若庫存扣減失敗,消息重新入隊,訂單服務重試,保證數據一致性。
  • 冪等性設計
    • 在消費者端記錄已處理消息的?Message ID,重復消息直接忽略。
    • 如訂單扣款時,通過訂單 ID 去重,避免重復扣款。
  • 解耦服務:通過隊列隔離生產者和消費者。
  • 高可用:集群和持久化保證可靠性。
  • 靈活路由:Exchange 和 Binding 實現復雜路由邏輯。
  • 負載均衡:多消費者分擔任務壓力。

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

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

相關文章

mac安裝vm虛擬機安裝包

因為mac安裝虛擬機時,發現下載過程變得不太一樣,會比較麻煩。所以決定發一下我已經下載的安裝包,個人用戶使用免費,商業版請自行去官網下載! 百度網盤下載鏈接 百度網盤 請輸入提取碼 提取碼:d4rc

LLama Factory從入門到放棄

目錄 簡介 安裝 LLama Factory界面介紹 數據格式要求 微調訓練 今天在這里介紹一種常用的大模型微調框架——LLama Factory。 簡介 LLama Factory 是一個高效的界面化大語言模型微調工具庫,支持多種參數高效微調技術,提供簡潔接口和豐富示例&#…

如何借助全球動態IP實現多平臺賬號的批量注冊?

無論是社交網絡、在線購物平臺還是專業應用軟件,賬號的創建和使用都是必不可少的。然而,在面對不同平臺各自的注冊限制和策略時,如何高效、安全且合法地進行賬號批量注冊成為了亟待解決的問題。本文將探討全球動態IP在這一過程中的作用及其如…

django admin 添加自定義頁面

在Django中,你可以通過多種方式向Django Admin添加自定義頁面。以下是一些常見的方法: 方法1:使用ModelAdmin的get_urls()方法 如果你只是想添加一個簡單的頁面來展示信息,你可以在你的ModelAdmin類中重寫get_urls()方法。 from…

Docker容器持久化

引言 Docker 容器作為一種輕量級、可移植的虛擬化技術,廣泛應用于開發、測試和生產環境中。然而,容器天生是短暫的,意味著它們在生命周期結束后會被銷毀,而其中的數據也會隨之丟失。為了確保容器中的數據能夠持久化,我…

ShaderToy學習筆記 02.圓

1. 畫圓 1.1. 圓的方程 圓的方程是:(x^2 y^2 r^2),其中(r)是圓的半徑。 我們可以使用 desmos 來驗證一下。 輸入 x^2 y^2 -10,即可得到圓。 類似下圖 1.2. 畫圓的方式 畫圓:使用圓的方程,判斷每個像素點是否在圓…

一文詳解卷積神經網絡中的卷積層和池化層原理 !!

文章目錄 前言 一、卷積核大小(Kernel Size) 1. 卷積核大小的作用 2. 常見的卷積核大小 3. 選擇卷積核大小的原則 二、步長(Stride) 1. Stride的作用 三、填充(Padding) 1. 填充的作用 四、通道數&#xff…

云+AI雙輪驅動,亞馬遜云科技加速中國企業出海新浪潮

導讀:全球化就是本地化 作者 | 小葳 圖片來源 | 攝圖 近年來,中國企業出海步伐不斷加快,“不出海,就出局”成為很多企業的共識。 據沙利文統計,2024年上半年,超過2000家中國上市企業布局海外市場&#xff…

C語言HashTable基本理解

文章目錄 一、哈希表概念1. 哈希表的基本概念2. 哈希表的核心組件2.1 哈希函數2.2 沖突處理(哈希碰撞) 3.哈希表的三種結構(1) 數組作為哈希表示例: 2. Set(集合)示例:查找數組中的重復元素1. Set 基礎概念…

【緩存與數據庫結合最終方案】偽從技術

實現偽從技術:基于Binlog的Following表變更監聽與緩存更新 技術方案概述 要實現一個專門消費者服務作為Following表的偽從,訂閱binlog并在數據變更時更新緩存,可以采用以下技術方案: 主要組件 MySQL Binlog監聽:使…

《100天精通Python——基礎篇 2025 第3天:變量與數據類型全面解析,掌握Python核心語法》

目錄 一、Python變量的定義和使用二、Python整數類型(int)詳解三、Python小數/浮點數(float)類型詳解四、Python復數類型(complex)詳解---了解五、Python字符串詳解(包含長字符串和原始字符串)5.1 處理字符串中的引號5.2 字符串的…

【前后端分離項目】Vue+Springboot+MySQL

文章目錄 1.安裝 Node.js2.配置 Node.js 環境3.安裝 Node.js 國內鏡像4.創建 Vue 項目5.運行 Vue 項目6.訪問 Vue 項目7.創建 Spring Boot 項目8.運行 Spring Boot 項目9.訪問 Spring Boot 項目10.實現 Vue 與 Spring Boot 聯動11.安裝 axios12.編寫請求13.調用函數請求接口14.…

線性代數(一些別的應該關注的點)

一、矩陣 矩陣運算:線性變換 縮放、平移、旋轉 無所不能的矩陣 - 三維圖形變換_嗶哩嗶哩_bilibili

01Redis快速入門(nosql、安裝redis、客戶端、命令及類型、java客戶端、序列化)

Redis的常見命令和客戶端使用 1.初識Redis Redis是一種鍵值型的NoSql數據庫,這里有兩個關鍵字: 鍵值型 NoSql 其中鍵值型,是指Redis中存儲的數據都是以key、value對的形式存儲,而value的形式多種多樣,可以是字符串…

AI編程:[體驗]從 0 到 1 開發一個項目的初體驗

一、開發信息 開發時間:1.5-2天工具使用: 不熟練,開發本項目前1天,才簡單使用了Cursor的功能 功能復雜度: 開發的功能相對簡單。頁面:2個,登錄頁面,個人中心頁面功能:5個…

LeetCode-392 判斷子序列

給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列&#…

Linux 系統監控大師:Glances 工具詳解助力自動化

看圖猜詩,你有任何想法都可以在評論區留言哦~ 摘要 Glances 是一款基于 Python 開發的跨平臺系統監控工具,集成了 CPU、內存、磁盤、網絡、進程等核心指標的實時監控能力,并支持命令行、Web界面、客戶端-服務器模式等多種使用場景。其輕量級…

Spring Boot 3.4.5 運行環境需求

📝 Spring Boot 3.4.5 運行環境要求 🌿 1?? 基本需求 ?? JDK版本:最低 Java 17 🔗 https://www.java.com/ 最高兼容至 Java 24 ?? 依賴框架:需搭配 Spring Framework 6.2.6 🔗 https://docs.sprin…

在KEIL里C51和MDK兼容以及添加ARM compiler5 version編譯器

前言 我們想在一個keil里面可以打開32和51的文件,這樣就不需要兩個keil了 還有就是現在的keil,比如我用的是5.41的,就沒有5版本的處理器,所以要安裝 本篇文章我們來詳細講解如何實現上面說的兩個內容 準備的東西 1.ARM5編譯器 …

Flutter 彈窗隊列管理:支持優先級的線程安全通用彈窗隊列系統

在復雜的 Flutter 應用開發中,彈窗管理是一個常見難題。手動管理彈窗的顯示順序和條件判斷不僅繁瑣,還容易出錯。為此,我們實現了一個支持優先級的線程安全通用彈窗隊列管理系統。它能夠自動管理彈窗的顯示順序,支持條件判斷&…