科技與技術系列 - 4: RabbitMQ

更新於 發佈於 閱讀時間約 6 分鐘

相比於求學時期處理的少量數據,進入職場後,許多線上產品、網頁等內容的使用量往往達到數十萬甚至數百萬。這樣的龐大流量如果不加以妥善管理,極有可能導致系統崩潰。在這種情況下,我們便能夠運用 RabbitMQ 等訊息佇列技術來有效地處理流量,確保系統的穩定性與可靠性。

簡介

什麼是 Queue

佇列(Queue)是一種抽象資料型別,按照先進先出(FIFO)的模式來處理資料,屬於一種線性表。這意味著最先進入佇列的元素會是最先被取出的元素,通常用於處理需要依照順序執行的任務或訊息。

什麼是 RabbitMQ

RabbitMQ 是一套開源的訊息佇列服務軟體,因其高效能、高可靠性和可伸縮性而廣受推崇。RabbitMQ 支援多種程式語言和作業系統,幾乎所有的現代服務都能利用 RabbitMQ 來實現系統解耦、流量平衡和高效的訊息處理。

簡單來說,RabbitMQ 是一個開源的消息中介軟體,專門處理不同系統之間的訊息流通與流量調節。

RabbitMQ 的架構

RabbitMQ 由五個主要部分組成:

  • 生產者(Producer):生產者是將訊息發送到 RabbitMQ 的應用程式或服務。它將訊息發送到指定的交換器(Exchange),由交換器負責後續的處理。
  • 交換器(Exchange):交換器接收來自生產者的訊息,並根據特定規則將這些訊息分配到一個或多個佇列中。RabbitMQ 支援四種主要的交換器類型:
    • Direct Exchange:根據精確的路由鍵(routing key)將訊息直接分發到指定的佇列。
    • Fanout Exchange:將訊息廣播到所有與之綁定的佇列,不會考慮路由鍵。
    • Topic Exchange:根據路由鍵的模式匹配來將訊息分發到對應的佇列,具有較高的靈活性。
    • Headers Exchange:根據訊息的標頭(header)內容來將訊息路由到合適的佇列,通常用於更複雜的條件過濾。
  • 佇列(Queue):佇列是用來存放訊息的容器。RabbitMQ 會依照先進先出(FIFO)的順序,將訊息從佇列中取出並交給消費者。
  • 綁定(Binding):綁定是交換器與佇列之間的關聯,決定訊息如何從交換器傳送到佇列。不同的交換器類型會有不同的綁定規則。
  • 消費者(Consumer):消費者是從佇列中取出並處理訊息的應用程式或服務。通常,每個消費者會持續連接到佇列並不斷地處理消息。

RabbitMQ 的特點

  1. 可靠性
    • 持久化:RabbitMQ 支持消息持久化,即使系統崩潰或重啟,未處理的消息也不會丟失。
    • 確認機制:消費者在成功處理消息後,會發送確認(acknowledgment)信號,確保每條消息都被正確處理,避免丟失。
    • 死信隊列(Dead-letter Queue, DLQ):當消息無法被消費或處理時,RabbitMQ 可以將其轉發到死信隊列,方便後續的錯誤分析和處理。
  2. 擴展性: RabbitMQ 支援集群模式,允許多個 RabbitMQ 節點組成集群,從而提升系統的可用性和處理能力。此外,RabbitMQ 還支援鏡像隊列(Mirrored Queue),可將隊列的數據同步到多個節點,提高容錯性。
  3. 靈活的消息分配: 根據不同的交換器類型,RabbitMQ 提供靈活的消息路由機制,使得根據需求來設計複雜的消息處理邏輯成為可能。例如,根據路由鍵、消息標頭等多種條件來精確分配訊息。
  4. 高可用性: RabbitMQ 支援鏡像隊列,能夠在集群中的多個節點之間同步佇列數據,確保即使某一節點失效,數據仍然可以正常訪問,避免服務中斷。
  5. 管理界面: RabbitMQ 提供了一個基於 Web 的管理界面,使用者可以輕鬆監控隊列的狀態,查看消息的處理情況,並執行各種管理操作,如創建、刪除交換器和隊列等。

RabbitMQ 的使用

使用理由

  • 解耦:RabbitMQ 使我們可以將重複且容易取得的資料集中存放,讓其他系統根據需求從 RabbitMQ 獲取,避免各系統之間直接綁定數據傳遞,降低系統間的耦合度。
  • 異步:我們可以先完成必要的步驟並立即回傳結果,將剩餘的工作交由 RabbitMQ 异步處理,這樣可以減少使用者的等待時間。
  • 降低峰值:這可能是 RabbitMQ 最重要的功能。當流量突增時,我們可以將過多的請求或消息先放入 RabbitMQ,讓系統的消費者根據自身處理能力逐步消化這些流量,避免瞬間流量衝擊導致系統崩潰。

使用情境

  1. 微服務架構: 在微服務架構中,服務之間通常需要進行異步通信。RabbitMQ 作為訊息中介,能有效解耦不同服務,確保它們之間的獨立運行與協作。
  2. 事件驅動架構: 使用 RabbitMQ 可輕鬆實現事件驅動架構。在事件發生時,系統向消息隊列發送事件訊息,其他系統或服務可消費這些訊息並根據事件做出響應。
  3. 流量削峰: RabbitMQ 可平滑處理流量高峰。當大量請求湧入時,系統不會立即過載,反而可以將請求排入隊列,讓消費者依據自身的處理能力逐步消化,避免系統崩潰。
  4. 任務排程與異步處理: 長時間運行的任務可被拆解為異步任務並送交給 RabbitMQ,然後交由消費者處理,避免主線程阻塞,提升系統的吞吐量與效能。

參考資料

  1. https://zh.wikipedia.org/zh-tw/队列
  2. https://zh.wikipedia.org/zh-tw/RabbitMQ
  3. https://www.rabbitmq.com/
  4. https://developer.aliyun.com/article/769883
留言
avatar-img
留言分享你的想法!
avatar-img
林柏宇的沙龍
2會員
49內容數
test
林柏宇的沙龍的其他內容
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/27
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
2025/04/20
本文介紹了容器的基本概念、組成部分以及其在應用開發中的重要性,特別是對初階和高階工程師的影響。透過深入探討容器的優點,以及Docker、Kubernetes和ArgoCD等相關技術,幫助讀者理解容器化的應用與管理,進而簡化開發過程並提高效率。適合對容器技術感興趣的開發者從零開始學習與掌握。
Thumbnail
2025/04/13
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。
Thumbnail
2025/04/13
本文探討自動化測試的核心理念與實際應用,涵蓋如何模擬運行環境、確保程式碼在各種情境下的穩定性,以及進行錯誤處理的方法。文中指出自動化測試的各種優點,並提到設計測試的注意事項。透過使用相關工具和方法,讀者可以有效進行功能測試,並掌握相關技巧以應對常見問題,讓開發過程更為順利。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
為什麼會有Schema Registry的出現? 因為Kafka的零拷貝原則, 也就是kafka本身並不會去碰觸到訊息也不進行資料驗證, 而是bypass的傳送, 預設都以位元組來傳輸資料會比較有效率, 但位元組誰看得懂啊...。 加上Kafka的特性是生產者與消費者並不能直接溝通, 因
Thumbnail
為什麼會有Schema Registry的出現? 因為Kafka的零拷貝原則, 也就是kafka本身並不會去碰觸到訊息也不進行資料驗證, 而是bypass的傳送, 預設都以位元組來傳輸資料會比較有效率, 但位元組誰看得懂啊...。 加上Kafka的特性是生產者與消費者並不能直接溝通, 因
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
Thumbnail
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
Thumbnail
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
Thumbnail
Kafka是一個先進的分佈式流處理平臺,具有高吞吐量、可擴展性、容錯性和低延遲特性,提供瞭解耦、非同步和削峰特點。本文介紹了Kafka的通訊模式、適合的應用場景和未來發展趨勢,旨在幫助使用者更好地理解和應用Kafka。
Thumbnail
Kafka是一個先進的分佈式流處理平臺,具有高吞吐量、可擴展性、容錯性和低延遲特性,提供瞭解耦、非同步和削峰特點。本文介紹了Kafka的通訊模式、適合的應用場景和未來發展趨勢,旨在幫助使用者更好地理解和應用Kafka。
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News