RocketMQ-概要篇

消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問題實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。使用較多的消息隊(duì)列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ,這里主要介紹下RocketMQ。RocketMQ的前身是Metaq,3.0后更名為RocketMQ,apache地址為:http://rocketmq.apache.org/

RocketMQ是什么?

看下Apache上關(guān)于RocketMQ的介紹:RocketMQ是一款低延遲、高可靠、可伸縮、易于使用的消息中間件。具有以下特征:

1.支持發(fā)布/訂閱(Pub/Sub)和點(diǎn)對(duì)點(diǎn)(P2P)消息模型

2.在一個(gè)隊(duì)列中可靠的先進(jìn)先出(FIFO)和嚴(yán)格的順序傳遞? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

3.支持拉pull和推push兩種消費(fèi)方式? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

4.單一隊(duì)列百萬消息的堆積能力? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

5.支持多種消息協(xié)議,如 JMS、MQTT 等? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

6.分布式高可用的部署架構(gòu),滿足至少一次消息傳遞語義? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

7.提供 docker 鏡像用于隔離測(cè)試和云集群部署? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

8.提供配置、指標(biāo)和監(jiān)控等功能豐富的 Dashboard

RocketMQ架構(gòu)

?RocketMQ主要由三部分組成:client(producer,consumer),broker,nameServer,如下架構(gòu)圖所示:

從上圖可以看出每一部分都為集群,當(dāng)然也可以部署為單點(diǎn)。集群的部署方式增加了系統(tǒng)的可靠性和吞吐量。

NameServer:MQ集群服務(wù)的治理者和協(xié)調(diào)者,相當(dāng)于zookeeper之于kafka。

Broker:通過提供輕量級(jí)的Topic和Queue機(jī)制來存儲(chǔ)和處理消息。上圖中可以看到broker可以提供主從方式以保證消息的可靠性,可以1主1從,也可以1主多從,主能讀寫,從只能讀。主從之間消息同步可以采取同步或者異步,同步可靠性更高,異步效率更高,可根據(jù)實(shí)際情況選擇。筆者從事于電商公司,選擇的是主從同步復(fù)制。

Producer:即消息的發(fā)送者,生產(chǎn)者將消息組裝,從NameServer獲取Topic的路由信息,然后將消息發(fā)送到具體的broker,broker收到消息后,采用同步刷盤或者異步刷盤的模式持久到本地磁盤。

Consumer:即消息消費(fèi)方。consumer是以組(ConsumerGroup)為單位消費(fèi)消息的,即一個(gè)消息只能被同一消費(fèi)組下一個(gè)消費(fèi)者消費(fèi)。消費(fèi)者通過NameServer獲取需要消費(fèi)的topic的broker信息,與之建立連接,輪訓(xùn)試的訪問是否有消息到來從而消費(fèi),push是pull的一種變種,只是單獨(dú)起了一個(gè)線程負(fù)責(zé)拉取消息而已。

到這里為止,相信大家已經(jīng)對(duì)RocketMQ有了一個(gè)簡(jiǎn)單的概念,后面即將揭開每一部分的實(shí)現(xiàn)原理,及解析部分源碼。

參考文章鏈接:RocketMQ 實(shí)戰(zhàn)之快速入門

? ? ? ? ? ? ? ? ? ? ? ? ?消息隊(duì)列的使用場(chǎng)景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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