【我們一起來學 RabbitMQ 一 】RabbitMQ 的基本介紹
嗨,大家好,我是小魔童哪吒,咱們從今天開始進入開源組件的學習,一邊學習一邊總結一邊分享
文章提綱如下:
- RabbitMQ 簡單介紹及使用
- RabbitMQ 的六種作業模式
本次文章不涉及編碼,編碼咱們統一放在下一次

RabbitMQ 簡單介紹
RabbitMQ 是一套開源(MPL)的訊息佇列服務軟體,是由 LShift 提供的一個 Advanced Message Queuing Protocol (AMQP) 的開源實作,由以高性能、健壯以及可伸縮性出名的 Erlang 寫成,
AMQP 是什么?
高級訊息佇列協議,它使得遵從該規范的客戶端應用和訊息中間件服務器的全功能互操作成為可能
客戶端應用可以通過這個協議與訊息代理和它實作的 AMQP 模型進行互動通信
MQ 是什么?
全稱 Message Queue , 即訊息總線
是一種跨行程、異步的通信機制
用于上下游傳遞訊息,由訊息系統來確保訊息的可靠傳遞,
RabbitMQ 一般使用在什么場景?
- 錯峰流控
- 保證資料的最終一致性
- 上下游邏輯解耦
- 具體的使用場景與下面說到的
RabbitMQ的六種作業模式息息相關
RabbitMQ 組件中都包含了啥?

- 消費者
可以訂閱某個佇列
- 生產者
創建訊息,然后發布到佇列中(queue),最終將訊息發送到監聽的消費者
Broker:
一個物體,用于標識訊息佇列服務器
Virtual Host
虛擬主機
標識一批交換機、訊息佇列和相關物件
虛擬主機是共享相同的身份認證和加密環境的獨立服務器域
每個vhost本質上就是一個mini版的RabbitMQ服務器,擁有自己的佇列、交換器、系結和權限機制
Exchange
交換器,用來接收生產者發送的訊息并將這些訊息路由給服務器中的佇列
Queue
訊息佇列,用來保存訊息直到發送給消費者
它是訊息的容器,也是訊息的終點
一個訊息可投入一個或多個佇列
訊息一直在佇列里面,等待消費者連接到這個佇列并將它取走
Banding
系結,用于訊息佇列和交換機之間的關聯
一個系結就是基于路由鍵將交換機和訊息佇列連接起來的路由規則,所以可以將交換器理解成一個由系結構成的路由表
Channel
信道,多路復用連接中的一條獨立的雙向資料流通道
信道是建立在真實的TCP連接內地虛擬鏈接,AMQP命令都是通過新到發出去的,不管是發布訊息、訂閱佇列還是接收訊息,這些動作都是通過信道完成的,為了復用一條TCP連接
Connection
網路連接,例如一個TCP連接,可以有多個
Publisher
訊息的生產者
也是一個向交換器發布訊息的客戶端應用程式
Consumer
訊息的消費者
表示從一個訊息佇列中取得訊息的客戶端應用程式
Message
訊息,它是由訊息頭和訊息體組成
訊息體是不透明的,而訊息頭則是由一系列的可選屬性組成
這些屬性包括如下引數
routing-key(路由鍵)priority(優先級)delivery-mode(訊息可能需要持久性存盤[訊息的路由模式])
市面上都有哪些 MQ ?
- RabbitMQ
- Kafka
- ActiveMQ
- ZeroMQ
- RocketMQ
那么我們為啥選擇 RabbitMQ ?
咱們來看看 RabbitMQ 的特點
可靠性
RabbitMQ 使用了 持久化、傳輸確認、發布確認 等 機制來保證可靠性
靈活的路由
在訊息進入佇列之前,通過Exchange來路由訊息
對于典型的路由功能,RabbitMQ 已經提供了一些內置的Exchange來實作
對于復雜的路由功能,RabbitMQ 可以將多個Exchange系結在一起,也通過插件機制實作自己的Exchange
訊息集群
多個 RabbitMQ 服務器可以組成一個集群,形成一個邏輯 Broker
高可用
RabbitMQ 佇列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下佇列仍然可用
多種語言客戶端
幾乎支持所有常用語言,比如Java、.NET、Ruby、GO等
管理界面
提供了易用的用戶界面,使得用戶可以監控和管理訊息 Broker
跟蹤機制
如果訊息例外,RabbitMQ 提供了訊息的跟蹤機制,使用者可以找出具體發生了什么
插件機制
提供了許多插件,來從多方面進行擴展,也可以編輯自己的插件
RabbitMQ 的六種作業模式
圖片來源于 RabbitMQ 官方檔案 https://www.rabbitmq.com/getstarted.html
simple 簡單模式
簡單的訊息生產者和簡單的消費者的關系,生產者生產訊息,放到佇列中,消費中消費佇列中的訊息

- 訊息產生者將訊息放入佇列
- 訊息的消費者監聽訊息佇列,如果佇列中有訊息就消費掉
訊息被拿走后,自動從佇列中洗掉
work 作業模式
多個消費端消費同一個佇列中的訊息,佇列采用輪詢的方式將訊息是平均發送給消費者,此處的資源是競爭關系

- 訊息產生者將訊息放入佇列,這里的消費者可以有多個
消費者C1,消費者C2,同時監聽同一個佇列
訊息被消費者C1,C2共同爭搶當前的訊息佇列內容,誰先拿到誰負責消費訊息
這里就會有這樣的問題,同一個訊息會被不同的消費者都消費掉,我們需要處理這種問題
可以設定一個開關,syncronize,保證一條訊息只能被一個消費者使用
- 用于場景
- 紅包場景
- 大型專案中的資源調度
publish/subscribe 發布訂閱模式
publish/subscribe 發布訂閱模式 , 相對于Work queues模式多了一個交換機,此處的資源是共享的
生產端先把訊息發送到交換機,再由交換機把訊息發送到系結的佇列中,每個系結的佇列都能收到由生產端發送的訊息

- X 代表交換機
RabbitMQ內部組件,每個消費者監聽自己的佇列 - 生產者將訊息發給
broker,由交換機將訊息轉發到系結此交換機的每個佇列,每個系結交換機的佇列都將接收
到訊息 - 用于場景
- 郵件群發
- 群聊天
- 廣播(廣告等)
routing 路由模式

- 每個消費者監聽自己的佇列,并且設定帶統配符的
routingkey - 生產者將訊息發給broker,由交換機根據
routingkey來轉發訊息到指定的佇列
大致涉及的流程如下:
生產者處理流程:
宣告佇列并宣告交換機 -> 創建連接 -> 創建通道 -> 通道宣告交換機 -> 通道宣告佇列 -> 通過通道使佇列系結到交換機并指定該佇列的routingkey(通配符) -> 制定訊息 -> 發送訊息并指定routingkey(通配符)
消費者處理流程:
宣告佇列并宣告交換機 -> 創建連接 -> 創建通道 -> 通道宣告交換機 -> 通道宣告佇列 -> 通過通道使佇列系結到交換機并指定routingkey(通配符) -> 重寫訊息消費方法 -> 執行訊息方法
Topics 模式實際上是路由模式的一種
他倆的最大的區別是 : Topics 模式發送訊息和消費訊息的時候是通過通配符去進行匹配的

通配符有如下注意點:
*/#星號或者井號代表通配符- 星號代表多個單詞,而井號代表一個單詞
- 路由功能添加模糊匹配
- 訊息生產者生產訊息,把訊息交給交換機
exchange - 交換機 exchange 根據
key的規則模糊匹配到對應的佇列,由佇列的監聽消費者接收訊息消費
RPC 模式
RPC 遠程程序呼叫,客戶端遠程呼叫服務端的方法 ,使用 MQ 可以實作 RPC 的異步呼叫

這是基于Direct交換機實作的,流程如下:
-
客戶端即是生產者也是消費者,向
RPC請求佇列發送RPC呼叫訊息,同時監聽RPC回應佇列 -
服務端監聽
RPC請求佇列的訊息,收到訊息后執行服務端的方法,得到方法回傳的結果 -
服務端將
RPC方法 的結果發送到RPC回應佇列, -
客戶端監聽
RPC回應佇列,接收到RPC呼叫結果
總結
RabbitMQ是一套開源(MPL)的訊息佇列服務軟體- RabbitMQ 組件中都包含如下部分
- 生產者
- 消費者
- broker 物體
- virtual host 虛擬機
- exhcnage 交換機
- binding 系結關系
- queue 佇列
- connection 連接
- channel 信道
- message 訊息
- 選擇
RabbitMQ的原因有哪些 RabbitMQ的六種作業模式:- simple 簡單模式
- work 作業模式
- publish/subscribe 訂閱發布模式
- routing 路由模式
- RPC 模式
參考資料:
RabbitMQ Tutorials
歡迎點贊,關注,收藏
朋友們,你的支持和鼓勵,是我堅持分享,提高質量的動力

好了,本次就到這里
技術是開放的,我們的心態,更應是開放的,擁抱變化,向陽而生,努力向前行,
我是小魔童哪吒,歡迎點贊關注收藏,下次見~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/304049.html
標籤:區塊鏈
下一篇:資料庫從入門到精通01
