RocketMQ簡(jiǎn)單介紹指的是什么,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)建站成立于2013年,我們提供高端成都網(wǎng)站建設(shè)、網(wǎng)站制作公司、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、網(wǎng)絡(luò)營銷推廣、微信小程序、微信公眾號(hào)開發(fā)、營銷推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為混凝土攪拌罐車企業(yè)提供源源不斷的流量和訂單咨詢。
RocketMQ是阿里開源的一款分布式消息中間件,滿足線上海量消息堆積的需求, 在2016年底捐贈(zèng)給Apache開源基金會(huì)成為孵化項(xiàng)目,2017年正式成為了Apache頂級(jí)項(xiàng)目。是一款純Java的消息中間件,可靠性、低延遲、可擴(kuò)展、易于使用的特性而著稱。
阿里早期也是基于ActiveMQ 5.x的分布式消息中間件來構(gòu)建其消息中間件,但是隨著主題和隊(duì)列的增加慢慢的發(fā)現(xiàn)ActiveMQ IO模塊遇到了瓶頸。我們盡力通過節(jié)流,斷路器或降級(jí)解決這個(gè)問題,但效果不佳。因此,我們開始關(guān)注當(dāng)時(shí)流行的消息傳遞解決方案Kafka。不幸的是,Kafka無法滿足我們的要求,特別是在低延遲和高可靠性方面。Kafka是一個(gè)分布式流媒體平臺(tái),它源于日志聚合案例。它不需要太高的并發(fā)性。在阿里巴巴的一些大型案例中,我們發(fā)現(xiàn)原始模型無法滿足我們的實(shí)際需求。
RocketMQ起源于最開始阿里的Metaq( Metamorphosis) 經(jīng)歷過Metaq 1.x、Metaq 2.x、RocketMQ3.x在其3.0版本的時(shí)候更名為RocketMQ,目前最新版本為RocketMQ4.5.x。
與其說是RocketMQ的使用場(chǎng)景,不如說是MQ(消息隊(duì)列)的使用場(chǎng)景,MQ的產(chǎn)品比較多目前比較流行的有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等
MQ 可應(yīng)用在多個(gè)領(lǐng)域,包括異步通信解耦、企業(yè)解決方案、金融支付、電信、電子商務(wù)、快遞物流、廣告營銷、社交、即時(shí)通信、手游、視頻、物聯(lián)網(wǎng)、車聯(lián)網(wǎng)等。
下面列舉了一些常用的場(chǎng)景:
一對(duì)多,多對(duì)多異步解耦,基于發(fā)布訂閱模型,對(duì)分布式應(yīng)用進(jìn)行異步解耦,增加應(yīng)用的水平擴(kuò)展能力。
削峰填谷,大促等流量洪流突然來襲時(shí),MQ 可以緩沖突發(fā)流量,避免下游訂閱系統(tǒng)因突發(fā)流量崩潰。
日志監(jiān)控,作為重要日志的監(jiān)控通信管道,將應(yīng)用日志監(jiān)控對(duì)系統(tǒng)性能影響降到最低。
消息推送,為社交應(yīng)用和物聯(lián)網(wǎng)應(yīng)用提供點(diǎn)對(duì)點(diǎn)推送,一對(duì)多廣播式推送的能力。
金融報(bào)文,發(fā)送金融報(bào)文,實(shí)現(xiàn)金融準(zhǔn)實(shí)時(shí)的報(bào)文傳輸,可靠安全。
電信信令,將電信信令封裝成消息,傳遞到各個(gè)控制終端,實(shí)現(xiàn)準(zhǔn)實(shí)時(shí)控制和信息傳遞
主流的MQ的對(duì)比RocketMQ 、 ActiveMQ 、 Kafka
| 消息產(chǎn)品 | 客戶端SDK | 協(xié)議和規(guī)范 | 消息存儲(chǔ) | 服務(wù)器觸發(fā)重新傳遞 | 廣播消息 | 高可用性和故障轉(zhuǎn)移 | 消息跟蹤 |
|---|---|---|---|---|---|---|---|
| ActiveMQ | Java,.NET,C ++等 | 推模型,支持OpenWire,STOMP,AMQP,MQTT,JMS | 使用JDBC和高性能日志(如levelDB,kahaDB)支持非常快速的持久性 | 不支持 | 支持 | 支持,根據(jù)存儲(chǔ),如果使用kahadb,則需要ZooKeeper服務(wù)器 | 不支持 |
| Kafka | Java,Scala等 | 拉模型,支持TCP | 高性能文件存儲(chǔ) | 不支持 | 不支持 | 支持,需要ZooKeeper服務(wù)器 | 不支持 |
| RocketMQ | Java,C ++,Go | 拉模型,支持TCP,JMS,OpenMessaging | 高性能和低延遲的文件存儲(chǔ) | 支持 | 支持 | 支持的Master-Slave模型,沒有其他套件 | 支持 |

Name Server
Name Server是一個(gè)幾乎無狀態(tài)節(jié)點(diǎn),可集群部署,節(jié)點(diǎn)之間無任何信息同步。
Broker
Broker部署相對(duì)復(fù)雜,Broker分為Master與Slave,一個(gè)Master可以對(duì)應(yīng)多個(gè)Slave,但是一個(gè)Slave只能對(duì)應(yīng)一個(gè)Master,Master與Slave的對(duì)應(yīng)關(guān)系通過指定相同的Broker Name,不同的Broker Id來定義,BrokerId為0表示Master,非0表示Slave。Master也可以部署多個(gè)。
每個(gè)Broker與Name Server集群中的所有節(jié)點(diǎn)建立長連接,定時(shí)(每隔30s)注冊(cè)Topic信息到所有Name Server。Name Server定時(shí)(每隔10s)掃描所有存活broker的連接,如果Name Server超過2分鐘沒有收到心跳,則Name Server斷開與Broker的連接。
Producer
Producer與Name Server集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長連接,定期從Name Server取Topic路由信息,并向提供Topic服務(wù)的Master建立長連接,且定時(shí)向Master發(fā)送心跳。Producer完全無狀態(tài),可集群部署。
Producer每隔30s(由ClientConfig的pollNameServerInterval)從Name server獲取所有topic隊(duì)列的最新情況,這意味著如果Broker不可用,Producer最多30s能夠感知,在此期間內(nèi)發(fā)往Broker的所有消息都會(huì)失敗。
Producer每隔30s(由ClientConfig中heartbeatBrokerInterval決定)向所有關(guān)聯(lián)的broker發(fā)送心跳,Broker每隔10s中掃描所有存活的連接,如果Broker在2分鐘內(nèi)沒有收到心跳數(shù)據(jù),則關(guān)閉與Producer的連接。
Consumer
Consumer與Name Server集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長連接,定期從Name Server取Topic路由信息,并向提供Topic服務(wù)的Master、Slave建立長連接,且定時(shí)向Master、Slave發(fā)送心跳。Consumer既可以從Master訂閱消息,也可以從Slave訂閱消息,訂閱規(guī)則由Broker配置決定。
Consumer每隔30s從Name server獲取topic的最新隊(duì)列情況,這意味著Broker不可用時(shí),Consumer最多最需要30s才能感知。
Consumer每隔30s(由ClientConfig中heartbeatBrokerInterval決定)向所有關(guān)聯(lián)的broker發(fā)送心跳,Broker每隔10s掃描所有存活的連接,若某個(gè)連接2分鐘內(nèi)沒有發(fā)送心跳數(shù)據(jù),則關(guān)閉連接;并向該Consumer Group的所有Consumer發(fā)出通知,Group內(nèi)的Consumer重新分配隊(duì)列,然后繼續(xù)消費(fèi)。
當(dāng)Consumer得到master宕機(jī)通知后,轉(zhuǎn)向slave消費(fèi),slave不能保證master的消息100%都同步過來了,因此會(huì)有少量的消息丟失。但是一旦master恢復(fù),未同步過去的消息會(huì)被最終消費(fèi)掉。
同步發(fā)送,線程阻塞,投遞completes阻塞結(jié)束
如果發(fā)送失敗,會(huì)在默認(rèn)的超時(shí)時(shí)間3秒內(nèi)進(jìn)行重試,最多重試2次
投遞completes不代表投遞成功,要check SendResult.sendStatus來判斷是否投遞成功
發(fā)送異步消息需要指定消息發(fā)送成功后的回調(diào)函數(shù),調(diào)用發(fā)送消息的API會(huì)立刻返回,消息發(fā)送者的線程不阻 塞,直到運(yùn)行結(jié)束,消息發(fā)送成功或者失敗的回調(diào)任務(wù)在新的線程中執(zhí)行。
消息不可靠,性能高,只負(fù)責(zé)往服務(wù)器發(fā)送一條消息,不會(huì)重試也不關(guān)心是否發(fā)送成功
此方式發(fā)送消息的過程耗時(shí)非常短,一般在微秒級(jí)別
RocketMQ物理部署圖:

術(shù)語解釋
消息主題(Topic)
Topic是生產(chǎn)者在發(fā)送消息和消費(fèi)者在拉取消息的類別。Topic與生產(chǎn)者和消費(fèi)者之間的關(guān)系非常松散。具體來說,一個(gè)Topic可能有0個(gè),一個(gè)或多個(gè)生產(chǎn)者向它發(fā)送消息;相反,一個(gè)生產(chǎn)者可以發(fā)送不同類型Topic的消息。類似的,消費(fèi)者組可以訂閱一個(gè)或多個(gè)主題,只要該組的實(shí)例保持其訂閱一致即可。
一個(gè)主題對(duì)應(yīng)多個(gè)隊(duì)列(默認(rèn)4個(gè))
消息是存儲(chǔ)在不同的隊(duì)列中
消費(fèi)組(ConsumerGroup)
一類 Consumer 的集合名稱,組內(nèi)的 Consumer 通常消費(fèi)一類消息,消費(fèi)消息邏輯一致。
一個(gè)consumerGroup只對(duì)應(yīng)一個(gè)topic
同一個(gè)ConsumerGroup中的消費(fèi)者訂閱的主題(Topic)和標(biāo)簽(Tag)必須一致(集群模式下消費(fèi)會(huì)有問題)
一個(gè)消息隊(duì)列只會(huì)對(duì)應(yīng)一個(gè)消費(fèi)者
生產(chǎn)組(ProducerGroup)
一類 Producer 的集合名稱,組內(nèi)的 Producer 通常發(fā)送一類消息,發(fā)送消息邏輯一致
一條消息被多個(gè)consumer消費(fèi),即使這些consumer屬于同一個(gè)ConsumerGroup,消息也會(huì)被ConsumerGroup中的每個(gè)Consumer都消費(fèi)一次,廣播消費(fèi)中ConsumerGroup概念可以認(rèn)為在消息劃分方面無意義。
一個(gè)ConsumerGroup中的Consumer實(shí)例平均分?jǐn)傁M(fèi)消息。例如某個(gè)Topic有9條消息,其中一個(gè)ConsumerGroup有3個(gè)實(shí)例(可能是3個(gè)進(jìn)程,或者3臺(tái)機(jī)器),那么每個(gè)實(shí)例只消費(fèi)其中部分,消費(fèi)完的消息不能被其他實(shí)例消費(fèi)。
看完上述內(nèi)容,你們掌握RocketMQ簡(jiǎn)單介紹指的是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁名稱:RocketMQ簡(jiǎn)單介紹指的是什么
標(biāo)題鏈接:http://www.chinadenli.net/article26/gpcjcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、域名注冊(cè)、企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化、Google、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)