說下RabbitMQ的整體架構

RabbitMQ 是一個基于 AMQP(Advanced Message Queuing Protocol) 協議的開源消息中間件,RabbitMQ的整體架構圍繞消息的生產、路由、存儲和消費設計,旨在實現高效、可靠的消息傳遞,它由多個核心組件協同工作。

核心組件

1. 生產者(Producer)

  • 負責創建并向RabbitMQ服務器發送消息。消息可以包含任意數據(如 JSON、文本、二進制等。生產者不直接將消息發送到隊列,而是通過交換機進行消息的路由。

2. 交換機(Exchange)

  • 接收生產者發送的消息,并根據路由規則將消息轉發到一個或多個隊列。交換機不存儲消息,如果沒有匹配的隊列,消息可能會被丟棄(取決于具體配置)。交換機的類型決定路由行為
  • 類型
    • Direct Exchange精確匹配,根據消息的路由鍵(routing key)進行匹配。如果路由鍵與綁定隊列時指定的鍵完全匹配,消息就會被發送到該隊列。比如在一個物流系統中,根據訂單的配送地區作為路由鍵,將訂單消息發送到對應地區的處理隊列。
    • Topic Exchange:支持通配符匹配的路由規則。使用 * 匹配一個單詞,# 匹配零個或多個單詞。比如在日志監控系統中,以系統名稱(如 order.*user.#)作為路由規則,將不同的日志消息發送到相應的隊列。
    • Fanout Exchange:將接收到的消息廣播到所有與它綁定的隊列,不考慮路由鍵。適用于廣播消息的場景,如系統通知,所有訂閱通知的隊列都會收到消息。
    • Headers Exchange:根據消息的headers屬性進行匹配,而不是路由鍵。這種類型相對較少使用。

3. 隊列(Queue)

  • 存儲消息的地方,消費者從隊列中獲取消息進行處理。隊列是RabbitMQ中消息存儲的基本單元,多個消費者可以從同一個隊列中競爭獲取消息。隊列需與交換機通過 Binding Key 綁定,才能接收消息。
  • 隊列可以設置持久化(服務器重啟后隊列依然存在)、排他性(僅創建它的連接可見且使用,連接關閉隊列自動刪除)、自動刪除(當所有消費者斷開連接后,隊列自動刪除)等屬性。

4. 消費者(Consumer)

  • 從RabbitMQ服務器的隊列中獲取消息并進行處理。消費者可以訂閱一個或多個隊列,當隊列中有新消息時,消費者會收到并處理。
  • 可以進行手動確認(ACK)或拒絕(NACK)消息,確保可靠性。

5. 消息代理(Broker)

  • 即RabbitMQ服務器本身,它負責接收生產者發送的消息根據交換機和綁定規則進行消息路由,并為消費者提供消息。Broker管理著交換機、隊列、綁定等各種資源,并保證消息的可靠傳遞。
    • 集群模式:為了提高可靠性和性能,RabbitMQ可以組成集群。集群中的節點可以共享隊列、交換機等資源,當某個節點出現故障時,其他節點可以繼續提供服務。
    • 鏡像隊列:是一種特殊的隊列集群方式,隊列會在多個節點上進行鏡像備份,確保即使某個節點故障,消息仍然可用。

輔助組件

1. 綁定(Binding)

  • 建立交換機和隊列之間的關聯關系。通過綁定,交換機知道應該將哪些消息發送到哪個隊列。綁定可以指定一個路由鍵(在Direct和Topic交換機中),用于更精確的消息路由。

2. 連接與信道(Connection & Channel)

  • Connection:生產者/消費者與 Broker 之間的 TCP 連接。
  • Channel:復用連接中的邏輯通道,避免頻繁創建 TCP 連接的開銷。

3. 虛擬主機(Virtual Host)

  • Virtual Host 是 RabbitMQ 中的一個邏輯概念,類似于數據庫中的“數據庫實例”。每個虛擬主機都有自己獨立的交換機、隊列、綁定等資源,它們之間相互隔離。虛擬主機為多租戶環境提供了支持,不同的應用或用戶可以在各自的虛擬主機中進行消息傳遞,互不干擾。
  • 比如云服務提供商,可以為每個租戶分配一個獨立的虛擬主機,每個租戶在自己的虛擬主機內管理自己的消息隊列系統,不用擔心與其他租戶的資源沖突。
    在這里插入圖片描述

架構特點

  1. 解耦生產與消費
    • 生產者無需知道消費者的存在,通過交換機和隊列實現松耦合。
  2. 靈活的路由機制
    • 通過交換機類型和綁定規則支持多種消息分發模式(點對點、發布訂閱等)。
  3. 可靠性保證
    • 支持消息持久化、手動確認(ACK)、死信隊列(Dead Letter Queue)等機制。
  4. 擴展性
    • 支持集群部署、鏡像隊列(高可用)、負載均衡。

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

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

相關文章

STM32--GPIO

教程 視頻 博主教程 STM32系統結構圖 GPIO GPIO(General Purpose Input/Output)是STM32內部的一種外設。 一個STM32芯片內存在多個GPIO外設,每個GPIO外設有16個引腳; 比如GPIOA:PA0~PA15; GPIOB:PB0~…

QUIC協議優化:HTTP_3環境下的超高速異步抓取方案

摘要 隨著 QUIC 和 HTTP/3 的普及,基于 UDP 的連接復用與內置加密帶來了遠超 HTTP/2 的性能提升,可顯著降低連接握手與擁塞恢復的開銷。本文以爬取知乎熱榜數據為目標,提出一種基于 HTTPX aioquic 的異步抓取方案,并結合代理 IP設…

[論文閱讀]MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System

MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System http://arxiv.org/abs/2504.12757 推出了 MCP Guardian,這是一個框架,通過身份驗證、速率限制、日志記錄、跟蹤和 Web 應用程序防火墻 (WAF) 掃描來…

Redis客戶端緩存的4種實現方式

Redis作為當今最流行的內存數據庫和緩存系統,被廣泛應用于各類應用場景。然而,即使Redis本身性能卓越,在高并發場景下,應用與Redis服務器之間的網絡通信仍可能成為性能瓶頸。 這時,客戶端緩存技術便顯得尤為重要。 客…

eNSP中路由器OSPF協議配置完整實驗和命令解釋

本實驗使用三臺華為路由器(R1、R2和R3)相連,配置OSPF協議實現網絡互通。拓撲結構如下: 實驗IP規劃 R1: GE0/0/0: 192.168.12.1/24 (Area 0)Loopback0: 1.1.1.1/32 (Area 0) R2: GE0/0/0: 192.168.12.2/24 (Area 0)GE0/0/1: 192.…

內網滲透——紅日靶場三

目錄 一、前期準備 二、外網探測 1.使用nmap進行掃描 2.網站信息收集 3.漏洞復現(CVE-2021-23132) 4.disable_function繞過 5.反彈shell(也,并不是) 6.SSH登錄 7.權限提升(臟牛漏洞) 8.信息收集 9.上線msf 三…

解決Win11下MySQL服務無法開機自啟動問題

問題描述 在win11系統中,明明將MySQL服務設置成了自動啟動,但在重啟電腦后MySQL服務還是無法自動啟動,每次都要重新到計算機管理的服務中找到服務再手動啟動。 解決方式 首先確保mysql服務的啟動類型為自動。 設置方法:找到此電…

后端項目進度匯報

項目概述 本項目致力于構建一個先進的智能任務自動化平臺。其核心技術是一套由大型語言模型(LLM)驅動的后端系統。該系統能夠模擬一個多角色協作的團隊,通過一系列精心設計或動態生成的處理階段,來高效完成各種復雜任務&#xff…

深度學習中學習率調整:提升食物圖像分類模型性能的關鍵實踐

深度學習中學習率調整:提升食物圖像分類模型性能的關鍵實踐 接上篇保存最優模型,在深度學習模型訓練過程中,學習率作為核心超參數,其設置直接影響模型的收斂速度與最終性能。本文將結合食物圖像分類項目,深入探討學習…

Vue 3零基礎入門:從環境搭建到第一個組件

Vue 3零基礎入門:從環境搭建到第一個組件 一、Vue 3簡介 Vue.js是一款漸進式JavaScript框架,用于構建用戶界面。Vue 3是Vue的最新主要版本,于2020年9月發布,帶來了許多改進和新特性: 更快的渲染速度更小的包體積Com…

為了結合后端而學習前端的學習日志(1)——純CSS靜態卡片案例

前端設計專欄 使用純CSS創建簡潔名片卡片的學習實踐 在這篇技術博客中,我將分享我的前端學習過程,如何使用純HTML和CSS創建一個簡潔美觀的名片式卡片,就像我博客首頁展示的那樣。這種卡片設計非常適合作為個人簡介、產品展示或團隊成員介紹…

k8s監控方案實踐(一):部署Prometheus與Node Exporter

k8s監控方案實踐(一):部署Prometheus與Node Exporter 文章目錄 k8s監控方案實踐(一):部署Prometheus與Node Exporter一、Prometheus簡介二、PrometheusNode Exporter實戰部署1. 創建Namespace(p…

谷歌最新推出的Gemini 2.5 Flash人工智能模型因其安全性能相較前代產品出現下滑

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

【Python】PDF文件處理(PyPDF2、borb、fitz)

Python提供了多種方法和庫用于處理PDF文件,這些工具可以幫助開發者實現諸如讀取、寫入、合并、拆分以及壓縮等功能。以下是幾個常用的Python PDF操作庫及其基本用法(PyPDF2、borb、fitz)。 1. PyPDF2 PyPDF2 是一個功能強大的庫&#xff0…

websocketd 10秒教程

websocketd 參考地址:joewalnes/websocketd 官網地址:websocketd websocketd簡述 websocketd是一個簡單的websocket服務Server,運行在命令行方式下,可以通過websocketd和已經有程序進行交互。 現在,可以非常容易地構…

Spring Boot 基于 Cookie 實現單點登錄:原理、實踐與優化詳解

前言 在多系統交互的應用場景中,單點登錄(SSO)能夠顯著提升用戶體驗,減少重復登錄的繁瑣操作。基于 Cookie 的單點登錄方案,憑借其簡單直觀、瀏覽器原生支持的特性,成為快速實現單點登錄的有效方式。本文將…

ModBus協議詳解:從基礎概念到C#實現RTU與TCP通訊

ModBus協議是莫迪康公司為了讓PLC之間進行數據通信而設計出來的協議。它是一種總線協議,是一種一對多,上下級的關系。 它的應用廣泛,具有免費開源,操作簡單的有點,并且可以兼容串口和網絡通訊,兼容也不錯。…

PHP數組排序深度解析:sort()、rsort()、asort()、arsort()、ksort()、krsort() 的適用場景與性能對比

在PHP開發中,數組排序是日常操作的核心技能之一。無論是處理用戶數據、產品列表,還是分析日志信息,合理的排序方法能顯著提升代碼的效率和可維護性。PHP提供了多種數組排序函數(如 sort()、rsort()、asort() 等)&#…

RabittMQ-高級特性2-應用問題

文章目錄 前言延遲隊列介紹ttl死信隊列存在問題延遲隊列插件安裝延遲插件使用事務消息分發概念介紹限流非公平分發(負載均衡) 限流負載均衡RabbitMQ應用問題-冪等性保障順序性保障介紹1順序性保障介紹2消息積壓總結 前言 延遲隊列介紹 延遲隊列(Delaye…

HOW - 在 Mac 上的 Chrome 瀏覽器中調試 Windows 場景下的前端頁面

文章目錄 為什么需要模擬 Windows 環境?一、修改 User-Agent 模擬 Windows 瀏覽器方法 1:通過 Chrome 開發者工具修改 UA方法 2:使用瀏覽器插件 二、模擬 Windows 的字體和滾動條樣式1. 模擬 Windows 字體2. 強制顯示滾動條(模擬 …