【RabbitMQ】核心概念和工作流程

文章目錄

  • RabbitMQ 工作流程
    • 流程圖
  • Producer 和 Consumer
  • Connecting 和 Channel
  • Virtual host
  • Queue
  • Exchange
  • RabbitMQ 工作流程

RabbitMQ 工作流程

流程圖

image.png

RabbitMQ 就是一個生產者/消費者模型

  • Producer 就是生產者、Consumer 就是消費者
  • BrokerRabbitMQ 服務器
  • 生產者和消費者都是 RabbitMQ 服務器的客戶端

生產者客戶端需要通過 Connection(連接)來和 RabbitMQ 服務器進行通信;RabbitMQ 服務器要通過 Connection(連接)來和消費者客戶端進行通信

  • 一個 Connection 有多個 channel
    • channel 就是消息傳遞的方式

BrockerRabbitMQ 服務器)

  • 一個 Brocker 可以有多個虛擬主機(虛擬機)
  • 多個虛擬機之間是邏輯上的隔離,并不是物理上的隔離
  • 每個虛擬機中,會有多個 Exchange(交換機)和 Queue(隊列)
    • 消息是先發送到交換機,然后由交換機進行消息的分發,然后到達隊列
      • RabbitMQ 服務器收到消息的時候,會帶上一些標簽(消息要發到哪里等等)
      • 隨后交換機拿到這個消息之后,會根據標簽或者一些設置的信息,把這個消息路由到一個或者兩個隊列
      • 如果沒有匹配隊列,交換機就會將此消息丟掉,或者返回給生產者

生產者和消費者使用的不是同一個 Connection

image.png

  • 這個圖上的 Connection 顯示的是客戶端的連接
    • 包含生產者和消費者的連接

Producer 和 Consumer

  • Producer:生產者,是 RabbitMQ Server 的客戶端,向 RabbitMQ 發送消息
  • Consumer:消費者,也是 RabbitMQ Server 的客戶端,從 RabbitMQ 接收消息
  • Brocker:就是 RabbitMQ Server,主要是接收和收發消息

image.png

  • 生產者根據一定的邏輯創建消息,然后把消息發送到 Brocker 里面,發送的這個消息通常是帶有一定的業務邏輯結構的

    • 比如生產者是一個訂單服務,那發送的就是訂單相關信息
      • 訂單 id
      • 訂單金額
      • 訂單數量
      • 支付時間
    • 比如生產者是一個用戶注冊信息,那發送的就是用戶相關信息
      • 用戶 id
      • 用戶年齡
      • 用戶性別
  • 在生產者發送消息的時候,通常還會帶上一些標簽,

    • Brocker 在收到消息的時候,交換機會根據這些標簽進行路由,最終把它放到隊列里面
  • 消費的時候,標簽就會被丟掉。消費者只會收到消息,并不知道其他信息

    • 消費者并不需要知道其他信息,只需要在收到消息之后,進行相應的邏輯處理即可

Connecting 和 Channel

image.png

  • Connection連接。是客戶端和 RabbitMQ 服務器之間的一個 TCP 連接,這個連接是建立消息傳遞的基礎,它負責傳輸客戶端和服務器之間的所有數據和控制信息
  • Channel通道信道Channel 是在 Connection 之上的一個抽象層。在 RabbitMQ 中,一個 TCP 連接可以有多個 Channel,每個 Channel 都是獨立的虛擬連接,消息的發送和接收都是基于 Channel

通道的主要作用是將消息的讀寫操作復用到一個 TCP 連接上,這樣可以減少建立和關閉連接的開銷,提高性能

Virtual host

  • Virtual host:虛擬主機。這是一個虛擬概念,它為消息隊列提供了一種邏輯上的隔離機制,對于 RabbitMQ 而言,一個 BrokerServer 上可以存在多個 Virtual host。當多個不同的用戶使用同一個 RabbitMQ Server 提供的服務時,可以虛擬劃分出多個 vhost,每個用戶在自己的 vhost 創建 exchange/queue

類似于 MySQLdatabase,是一個邏輯上的集合,一個 MySQL 服務器可以有多個 database

Queue

  • Queue隊列RabbitMQ 的內部對象,用于存儲消息

消息經過一系列的轉發

  • 先通過 Channel 到達 Exchange
  • 然后通過 Exchange 到達 Queue
  • 最終存儲的地方就是 Queue

image.png
隊列和消費者的關系,是多對多的

  • 一個隊列,可以由多個消費者來訂閱
  • 一個消費者也可以訂閱多個隊列

Exchange

  • Exchange:交換機。message 到達 Brocker 的第一站,它負責接收生產者發送的消息,并根據特定的規則把這些消息路由到一個或多個 Queue

image.png

  • 消息可能會發給多個隊列
  • 可能發給一個隊列
  • 也可能沒有隊列

RabbitMQ 工作流程

image.png

  1. Producer 生產了一條消息
  2. Producer 連接到 RabbitMQ Brocker,建立一個連接(Connection),開啟一個信道(Channel
  3. Producer 聲明一個交換機(Exchange),路由消息
  4. Producer 聲明一個隊列(Queue),存放信息
  5. Producer 發送消息至 RabbitMQ Brocker
  6. RabbitMQ Brocker 接收消息,并存入相應的隊列(Queue)里面,如果未找到相應的隊列,則根據生產者的配置,選擇丟棄或者退回給生產者

如果我們把 RabbitMQ 比作一個物流公司,那么它的一些核心概念可以這樣理解:

  • Brocker 就類似整個物流公司的總部,它負責協調和管理所有的物流站點,確保包裹安全、高效地送達
  • Virtual Host 可以看做是物流公司為不同客戶或業務部門劃分的獨立運營中心。每個運營中心都有自己的倉庫(Queue),分揀規則(Exchange)和運輸路線(ConnectionChannel),這樣可以確保不同客戶的包裹處理不會相互干擾,同時提供定制化的服務
  • Exchange 就像是站點里的分揀中心。當包裹到達時,分揀中心會根據包裹上的標簽來決定這個包裹應該送往那個目的地(隊列)。快遞站點可能有不同類型的分揀中心,有的按照具體地址分揀,有的將包裹復制給多個收件人等
  • Queue 就是快遞站點里的一個個倉庫,用來臨時存放等待派送的包裹。每個倉庫都有一個或多個快遞員(消費者)負責從倉庫中取出包裹并派送給最終的收件人
  • Connection 就像是快遞員與快遞站點之間的通信線路,快遞員需要通過這個線路來接收派送任務(消息)
  • Channel 就像是快遞員在執行任務時使用的多個并行的通信線路。這樣,快遞員可以同時處理多個包裹,比如一遍派送包裹,一邊接收新的包裹

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

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

相關文章

龍虎榜——20250414

今天縮量上漲有些乏力,壓力位還在~ 2025年4月14日龍虎榜行業方向分析 一、核心主線方向 黃金與貴金屬(避險邏輯強化) ? 驅動邏輯:國際地緣沖突持續升溫(如中東局勢、臺海動態),疊加美國特朗普…

蔚來汽車智能座艙接入通義大模型,并使用通義靈碼全面提效

為加速AI應用在企業市場落地,4月9日,阿里云在北京召開AI勢能大會。阿里云智能集團資深副總裁、公共云事業部總裁劉偉光發表主題演講,大模型的社會價值正在企業市場釋放,阿里云將堅定投入,打造全棧領先的技術&#xff0…

探索 Go 與 Python:性能、適用場景與開發效率對比

1 性能對比:執行速度與資源占用 1.1 Go 的性能優勢 Go 語言被設計為具有高效的執行速度和低資源占用。它編譯后生成的是機器碼,能夠直接在硬件上運行,避免了 Python 解釋執行的開銷。 以下是一個用 Go 實現的簡單循環計算代碼: …

虛幻引擎 Anim To Tex| RVT | RT

本文上篇分為4個部分:動畫驅動材質,虛擬紋理,Rendertarget,以及其他雜項的地編ta干貨整理。(其中RT部分基本為UOD重要截圖摘錄) 本文下篇為:skylight和directional light的區別,未完…

kingbase權限管理

1. kingbase模式權限管理 1.1授予用戶對模式的權限 以具有足夠權限的用戶登錄后,執行以下 SQL 語句來授予用戶對模式的相應權限。假設你要授予用戶 your_user 對模式 your_schema 的使用權限: sql -- 授予用戶使用模式的權限 GRANT USAGE ON SCHEMA …

9.thinkphp的請求

請求對象 當前的請求對象由think\Request類負責,該類不需要單獨實例化調用,通常使用依賴注入即可。在其它場合則可以使用think\facade\Request靜態類操作。 項目里面應該使用app\Request對象,該對象繼承了系統的think\Request對象&#xff…

Java從入門到“放棄”(精通)之旅——方法的使用⑤

Java從入門到“放棄”(精通)之旅🚀——方法的使用⑤ 📖引言: 在編程領域,代碼如同精密的齒輪相互咬合驅動程序運轉。隨著項目規模漸長,重復的代碼片段如同冗余的齒輪,不僅增加負重…

鴻蒙NEXT開發格式化工具類(ArkTs)

import { i18n } from kit.LocalizationKit;/*** 格式化工具類* 提供電話號碼格式化、歸屬地查詢、字符轉換等功能。* author: 鴻蒙布道師* since: 2025/04/14*/ export class FormatUtil {/*** 判斷傳入的電話號碼格式是否正確。* param phone - 待驗證的電話號碼* param coun…

[Python基礎速成]2-模塊與包與OOP

上篇??[Python基礎速成]1-Python規范與核心語法 目錄 Python模塊創建模塊與導入屬性__name__dir()函數標準模塊 Python包類類的專有方法 對象繼承多態 Python模塊 Python 中的模塊(Module)是一個包含 Python 定義和語句的文件,文件名就是模…

OSI參考模型和TCP/IP模型

1.OSI參考模型 OSI模型: OSI參考模型有7層,自下而上依次為物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層。(記憶口訣:物聯網叔會用)。低…

linux Shell編程之循環語句(三)

目錄 一. for 循環語句 1. for語句的結構 2. for 語句應用示例 (1) 根據姓名列表批量添加用戶 (2) 根據 IP 地址列表檢查主機狀態 二. 使用 while 循環語句 1. while 語句的結構 2. while 語句應用示例 (1) 批量添加規律編號的用戶 (2) 猜價格游戲 三. until 循環語…

最新扣子實戰教程,利用扣子平臺通過在線表格記錄,批量生圖,再也不要一條條的粘貼提示詞了

1、功能描述 大家好,我是濤濤。今天我要給大家講解如何在扣子平臺上對接飛書電子表格。由于多維表格相對復雜,而很多業務場景其實只需要電子表格就能滿足,因此今天我們將演示如何在扣子平臺上讀取飛書電子表格并批量生成圖片。 先看效果&am…

java -jar指定類加載

在 Java 中,使用 java -jar 命令運行 JAR 文件時,默認會加載 JAR 文件的 MANIFEST.MF 文件中指定的 Main-Class。如果你想在運行時指定一個類來加載,可以通過以下方式實現: 方法 1:直接指定類路徑和類名 如果你不想使用…

多模態思維鏈(Multimodal Chain of Thought, MCoT)六大技術支柱在醫療領域的應用

多模態思維鏈(Multimodal Chain of Thought, MCoT)通過整合文本、圖像、視頻等多模態數據,結合邏輯推理與深度學習技術,在醫療領域展現出強大的應用潛力。其六大技術支柱在醫療場景中的具體應用如下: 一、推理構建視角:醫學診斷的流程優化 MCoT通過多模態推理鏈生成技術…

從文本到視頻:基于擴散模型的AI生成系統全解析(附PyTorch實現)

當語言遇見動態視覺 "用文字生成電影場景"曾是科幻作品中的幻想,如今借助擴散模型(Diffusion Models)正逐步成為現實。本文將手把手帶你實現一個創新的文本到視頻生成系統,通過深度解析擴散模型原理,結合獨…

科普:如何通過ROC曲線,確定二分類的“理論閾值”

在二分類問題中,已知預測概率(如邏輯回歸、神經網絡輸出的概率值)時,閾值的選擇直接影響分類結果(正/負樣本判定)。 一、實踐中的閾值選擇方法 1. 基于業務目標的調整 最大化準確率:適用于樣…

2025ArkTS基礎UI(一)——Column、Row、Text、Button組件

2025ArkTS基礎UI(一)——Column、Row、Text、Button組件 前言 臭寶們,今天我們來學習ArkTS基礎UI組件的使用,其中包括: Column、Row、Text、Button組件。 知識點 Colum、Row組件用于布局,Text、Image、Button組件用于展示。 …

強化學習:基于價值的方法做的是回歸,基于策略的方法做的是分類,可以這么理解嗎?

在強化學習領域,基于價值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是兩種核心范式。本文將從目標函數、優化機制以及與機器學習任務的類比角度,探討這兩種方法是否可以被分別理解為回歸和分類任務,并深入分析其內在邏輯。 一、基于價值的方法…

折疊屏手機:技術進步了,柔性OLED面板測試技術需求跟上了嗎?

全球智能手機市場陷入創新焦慮,折疊屏手機被寄予厚望,2023 年出貨量同比增長 62%。但在供應鏈技術狂歡背后,存在諸多問題。消費端數據顯示,用戶使用頻率低,定價策略反常。產業鏈重構雖讓部分企業獲利,卻推高…

前端在線工具 CodePen 和 JSFiddle

前端在線工具 CodePen 和 JSFiddle CodePen 概述:CodePen 是一個社交化的前端開發環境,用戶可以在這里創建代碼片段(稱為“Pens”),分享和展示自己的前端開發作品。 主要功能: 實時預覽:用戶在…