RabbitMQ簡介

RabbitMQ概念

生產(chǎn)者與消費者
  • Producer:消息的生產(chǎn)者
  • Consumer:消息的消費者
Queue
  • 消息隊列,提供了 FIFO 的處理機制,具有緩存消息的能力。RabbitMQ 中,隊列消息可以設(shè)置為持久化,臨時或者自動刪除。
  • 設(shè)置為持久化的隊列,Queue 中的消息會在 Server 本地硬盤存儲一份,防止系統(tǒng) Crash,數(shù)據(jù)丟失。
  • 設(shè)置為臨時隊列,Queue 中的數(shù)據(jù)在系統(tǒng)重啟之后就會丟失。
  • 設(shè)置為自動刪除的隊列,當(dāng)不存在用戶連接到 Server,隊列中的數(shù)據(jù)會被自動刪除。
ExChange

Exchange 類似于數(shù)據(jù)通信網(wǎng)絡(luò)中的交換機,提供消息路由策略。RabbitMQ 中,Producer 不是通過信道直接將消息發(fā)送給 Queue,而是先發(fā)送給 ExChange。一個 ExChange 可以和多個 Queue 進行綁定,Producer 在傳遞消息的時候,會傳遞一個 ROUTING_KEY ,ExChange 會根據(jù)這個 ROUTING_KEY 按照特定的路由算法,將消息路由給指定的 Queue。和 Queue 一樣,ExChange 也可設(shè)置為持久化,臨時或者自動刪除。

ExChange的 4 種類型
  • direct(默認):直接交換器,工作方式類似于單播,ExChange 會將消息發(fā)送完全匹配 ROUTING_KEY 的 Queue(key 就等于 queue)
  • fanout:廣播是式交換器,不管消息的 ROUTING_KEY 設(shè)置為什么,ExChange 都會將消息轉(zhuǎn)發(fā)給所有綁定的 Queue(無視 key,給所有的 queue 都來一份)
  • topic:主題交換器,工作方式類似于組播,ExChange 會將消息轉(zhuǎn)發(fā)和 ROUTING_KEY 匹配模式相同的所有隊列(key 可以用“寬字符”模糊匹配 queue),比如,ROUTING_KEYuser.stock 的 Message 會轉(zhuǎn)發(fā)給綁定匹配模式為 * .stock,user.stock, * . *#.user.stock.# 的隊列。( * 表是匹配一個任意詞組,# 表示匹配 0 個或多個詞組)
  • headers:消息體的 header 匹配,無視 key,通過查看消息的頭部元數(shù)據(jù)來決定發(fā)給那個 queue(AMQP 頭部元數(shù)據(jù)非常豐富而且可以自定義)
Binding

所謂綁定就是將一個特定的 ExChange 和一個特定的 Queue 綁定起來。ExChange 和 Queue 的綁定可以是多對多的關(guān)系。

Virtual Host

在 RabbitMQ Server 上可以創(chuàng)建多個虛擬的 Message Broker,又叫做 Virtual Hosts (vhosts)。每一個 vhost 本質(zhì)上是一個 mini-rabbitmq server,分別管理各自的 ExChange,和 bindings。vhost 相當(dāng)于物理的 Server,可以為不同 app 提供邊界隔離,使得應(yīng)用安全的運行在不同的 vhost 實例上,相互之間不會干擾。Producer 和 Consumer 連接 rabbit server 需要指定一個 vhost。

RabbitMQ 的使用過程

  • 客戶端連接到消息隊列服務(wù)器,打開一個 Channel。
  • 客戶端聲明一個 ExChange,并設(shè)置相關(guān)屬性。
  • 客戶端聲明一個 Queue,并設(shè)置相關(guān)屬性。
  • 客戶端使用 Routing Key,在 ExChange 和 Queue 之間建立好綁定關(guān)系。
  • 客戶端投遞消息到 ExChange。
  • ExChange 接收到消息后,就根據(jù)消息的 key 和已經(jīng)設(shè)置的 binding,進行消息路由,將消息投遞到一個或多個隊列里。

RabbitMQ 的優(yōu)點

  • 基于 ErLang 語言開發(fā)具有高可用高并發(fā)的優(yōu)點,適合輯群服務(wù)器
  • 健壯、穩(wěn)定、易用、跨平臺、支持多種語言、文檔齊全
  • 有消息確認機制和持久化機制,可靠性高
  • 開源
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容