【我們一起來學 RabbitMQ 一 】RabbitMQ 的基本介紹
時間:2023-06-27 23:21:02 | 來源:網(wǎng)站運營
時間:2023-06-27 23:21:02 來源:網(wǎng)站運營
【我們一起來學 RabbitMQ 一 】RabbitMQ 的基本介紹:
【我們一起來學 RabbitMQ 一 】RabbitMQ 的基本介紹
嗨,大家好,我是小魔童哪吒,咱們從今天開始進入開源組件的學習,一邊學習一邊總結一邊分享
文章提綱如下:
- RabbitMQ 簡單介紹及使用
- RabbitMQ 的六種工作模式
本次文章不涉及編碼,編碼咱們統(tǒng)一放在下一次
RabbitMQ 簡單介紹
RabbitMQ 是一套開源(MPL)的消息隊列服務軟件,是由 LShift 提供的一個 Advanced Message Queuing Protocol (AMQP) 的開源實現(xiàn),由以高性能、健壯以及可伸縮性出名的 Erlang 寫成。
AMQP 是什么?
高級消息隊列協(xié)議
,它使得遵從該規(guī)范的客戶端應用和消息中間件服務器的全功能互操作成為可能
客戶端應用可以通過這個協(xié)議與消息代理和它實現(xiàn)的
AMQP
模型進行交互通信
MQ 是什么?
全稱
Message Queue
, 即消息總線
是一種跨進程、異步的通信機制
用于上下游傳遞消息,由消息系統(tǒng)來確保消息的可靠傳遞。
RabbitMQ 一般使用在什么場景?
- 錯峰流控
- 保證數(shù)據(jù)的最終一致性
- 上下游邏輯解耦
- 具體的使用場景與下面說到的
RabbitMQ
的六種工作模式息息相關
RabbitMQ 組件中都包含了啥?
可以訂閱某個隊列
創(chuàng)建消息,然后發(fā)布到隊列中(queue),最終將消息發(fā)送到監(jiān)聽的消費者
一個實體,用于標識消息隊列服務器
虛擬主機
標識一批交換機、消息隊列和相關對象
虛擬主機是共享相同的身份認證和加密環(huán)境的獨立服務器域
每個
vhost
本質上就是一個mini版的
RabbitMQ
服務器,擁有自己的隊列、交換器、綁定和權限機制
交換器,用來接收生產者發(fā)送的消息并將這些消息路由給服務器中的隊列
消息隊列,用來保存消息直到發(fā)送給消費者
它是消息的容器,也是消息的終點
一個消息可投入一個或多個隊列
消息一直在隊列里面,等待消費者連接到這個隊列并將它取走
綁定,用于消息隊列和交換機之間的關聯(lián)
一個綁定就是基于路由鍵將交換機和消息隊列連接起來的路由規(guī)則,所以可以將
交換器理解成一個由綁定構成的
路由表信道,多路復用連接中的一條獨立的雙向數(shù)據(jù)流通道
信道是建立在真實的
TCP
連接內地虛擬鏈接,
AMQP
命令都是通過新到發(fā)出去的,不管是
發(fā)布消息、訂閱隊列還是接收消息,這些動作都是通過信道完成的,為了復用一條TCP連接
網(wǎng)絡連接,例如一個TCP連接,可以有多個
消息的生產者
也是一個向交換器發(fā)布消息的客戶端應用程序
消息的消費者
表示從一個消息隊列中取得消息的客戶端應用程序
消息,它是由
消息頭和消息體組成消息體是不透明的,而消息頭則是由一系列的可選屬性組成
這些屬性包括如下參數(shù)
routing-key
(路由鍵)priority
(優(yōu)先級)delivery-mode
(消息可能需要持久性存儲[消息的路由模式])
市面上都有哪些 MQ ?
- RabbitMQ
- Kafka
- ActiveMQ
- ZeroMQ
- RocketMQ
那么我們?yōu)樯哆x擇 RabbitMQ ?
咱們來看看
RabbitMQ
的特點
RabbitMQ
使用了 持久化、傳輸確認、發(fā)布確認 等 機制來保證可靠性
在消息進入隊列之前,通過
Exchange
來路由消息
對于典型的路由功能,
RabbitMQ
已經(jīng)提供了一些內置的
Exchange
來實現(xiàn)
對于復雜的路由功能,
RabbitMQ
可以將多個
Exchange
綁定在一起,也通過插件機制實現(xiàn)自己的
Exchange
多個 RabbitMQ 服務器可以組成一個集群,形成一個邏輯 Broker
RabbitMQ 隊列可以在集群中的機器上進行鏡像,使得在部分節(jié)點出問題的情況下隊列仍然可用
幾乎支持所有常用語言,比如
Java、.NET、Ruby、GO
等
提供了易用的用戶界面,使得用戶可以監(jiān)控和管理消息 Broker
如果消息異常,RabbitMQ 提供了消息的跟蹤機制,使用者可以找出具體發(fā)生了什么
提供了許多插件,來從多方面進行擴展,也可以編輯自己的插件
RabbitMQ 的六種工作模式
圖片來源于 RabbitMQ 官方文檔
https://www.rabbitmq.com/getstarted.htmlsimple 簡單模式
簡單的消息生產者和簡單的消費者的關系,生產者生產消息,放到隊列中,消費中消費隊列中的消息
- 消息產生者將消息放入隊列
- 消息的消費者監(jiān)聽消息隊列,如果隊列中有消息就消費掉
消息被拿走后,自動從隊列中刪除
work 工作模式
多個消費端消費同一個隊列中的消息,隊列采用輪詢的方式將消息是平均發(fā)送給消費者,此處的資源是競爭關系
消費者C1,消費者C2,同時監(jiān)聽同一個隊列
消息被消費者C1,C2共同爭搶當前的消息隊列內容,誰先拿到誰負責消費消息
這里就會有這樣的問題,
同一個消息會被不同的消費者都消費掉,我們需要處理這種問題
可以設置一個開關,
syncronize
,保證一條消息只能被一個消費者使用
publish/subscribe 發(fā)布訂閱模式
publish/subscribe 發(fā)布訂閱模式 , 相對于
Work queues模式多了一個
交換機,此處的資源是共享的
生產端先把消息發(fā)送到交換機,再由交換機把消息發(fā)送到綁定的隊列中,每個綁定的隊列都能收到由生產端發(fā)送的消息
- X 代表交換機
RabbitMQ
內部組件,每個消費者監(jiān)聽自己的隊列 - 生產者將消息發(fā)給
broker
,由交換機將消息轉發(fā)到綁定此交換機的每個隊列,每個綁定交換機的隊列都將接收 到消息 - 用于場景
routing 路由模式
- 每個消費者監(jiān)聽自己的隊列,并且設置帶統(tǒng)配符的
routingkey
- 生產者將消息發(fā)給broker,由交換機根據(jù)
routingkey
來轉發(fā)消息到指定的隊列
大致涉及的流程如下:
生產者處理流程:
聲明隊列并聲明交換機 -> 創(chuàng)建連接 -> 創(chuàng)建通道 -> 通道聲明交換機 -> 通道聲明隊列 -> 通過通道使隊列綁定到交換機并指定該隊列的routingkey(通配符) -> 制定消息 -> 發(fā)送消息并指定routingkey(通配符)
消費者處理流程:
聲明隊列并聲明交換機 -> 創(chuàng)建連接 -> 創(chuàng)建通道 -> 通道聲明交換機 -> 通道聲明隊列 -> 通過通道使隊列綁定到交換機并指定routingkey(通配符) -> 重寫消息消費方法 -> 執(zhí)行消息方法
Topics 模式實際上是路由模式的一種他倆的最大的區(qū)別是 : Topics 模式發(fā)送消息和消費消息的時候是通過
通配符去進行匹配的
通配符有如下注意點:
*/#
星號或者井號代表通配符- 星號代表多個單詞,而井號代表一個單詞
- 路由功能添加模糊匹配
- 消息生產者生產消息,把消息交給交換機
exchange
- 交換機 exchange 根據(jù)
key
的規(guī)則模糊匹配到對應的隊列,由隊列的監(jiān)聽消費者接收消息消費
RPC
模式
RPC
遠程過程調用,客戶端遠程調用服務端的方法 ,使用
MQ
可以實現(xiàn)
RPC
的異步調用
這是基于
Direct交換機
實現(xiàn)的,流程如下:
- 客戶端即是生產者也是消費者,向
RPC
請求隊列發(fā)送 RPC
調用消息,同時監(jiān)聽RPC
響應隊列
- 服務端監(jiān)聽
RPC
請求隊列的消息,收到消息后執(zhí)行服務端的方法,得到方法返回的結果
- 服務端將
RPC
方法 的結果發(fā)送到RPC
響應隊列。
- 客戶端監(jiān)聽
RPC
響應隊列,接收到RPC
調用結果
總結
RabbitMQ
是一套開源(MPL)的消息隊列服務軟件- RabbitMQ 組件中都包含如下部分
- 生產者
- 消費者
- broker 實體
- virtual host 虛擬機
- exhcnage 交換機
- binding 綁定關系
- queue 隊列
- connection 連接
- channel 信道
- message 消息
- 選擇
RabbitMQ
的原因有哪些 RabbitMQ
的六種工作模式: - simple 簡單模式
- work 工作模式
- publish/subscribe 訂閱發(fā)布模式
- routing 路由模式
- RPC 模式
參考資料:RabbitMQ Tutorials歡迎點贊,關注,收藏
朋友們,你的支持和鼓勵,是我堅持分享,提高質量的動力
好了,本次就到這里
技術是開放的,我們的心態(tài),更應是開放的。擁抱變化,向陽而生,努力向前行。
我是
小魔童哪吒,歡迎點贊關注收藏,下次見~