當前位置:編程學習大全網 - 圖片素材 - RocketMQ 簡介

RocketMQ 簡介

RocketMQ在阿裏內部叫做Metaq(最早名為Metamorphosis,中文意思 變形記 ,是作家卡夫卡的中篇小說代表作,可見是為了致敬Kafka)。

RocketMQ是Metaq3.0之後的開源版本。

Metaq在阿裏巴巴集團內部、螞蟻金服、菜鳥等各業務中被廣泛使用,接入了上萬個應用系統中。並平穩支撐了歷年雙十壹大促(萬億級的消息),在性能、穩定性、可靠性等方面表現出色,在整個阿裏技術體系和大中臺戰略中發揮著舉足輕重的作用。

Metaq最終源於Kafka,早起借鑒了Kafka很多優秀的設計。但是由於Kafka是Scale語言編寫而阿裏系主要使用Java,且無法滿足阿裏的電商、金融業務場景,所以誓嘉(花名)團隊用Java重新造輪子,並做了大量的改造和優化。

在此之前,淘寶有壹款消息中間件名為 Notify ,目前已經逐步被Metaq所取代。

第壹代的Notify主要使用了推模型,解決了事務消息;第二代的MetaQ主要使用了拉模型,解決了順序消息和海量堆積的問題。相比起Kafka使用的Scale語言編寫,RabbitMQ 使用Erlang語言編寫,基於Java的RocketMQ開源後更容易被廣泛的研究,以及其他大廠定制開發。

執行流程:

RocketMQ 消息訂閱有兩種模式,壹種是Push模式(MQPushConsumer),即MQServer主動向消費端推送;另外壹種是Pull模式(MQPullConsumer),即消費端在需要時,主動到MQ Server拉取。但在具體實現時, Push和Pull模式本質都是采用消費端主動拉取的方式 ,即 Consumer 輪詢從 Broker 拉取消息。

優點:就是實時性高。

缺點:在於消費端的處理能力有限,當瞬間推送很多消息給消費端時,容易造成消費端的消息積壓,嚴重時會壓垮客戶端。

Push 與 Pull 區別:

Push 方式裏,Consumer 把長輪詢的動作封裝了,並註冊MessageListener監聽器,取到消息後,喚醒MessageListener的consumeMessage()來消費,對用戶而言,感覺消息是被推送過來的。

Pull 方式裏,取消息的過程需要用戶自己主動調用,首先通過打算消費的 Topic 拿到 MessageQueue 的集合,遍歷MessageQueue集合,然後針對每個MessageQueue批量取消息,壹次取完後,記錄該隊列下壹次要取的開始offset,直到取完了,再換另壹個MessageQueue。

RocketMQ 使用長輪詢機制來模擬 Push 效果,算是兼顧了二者的優點。

  • 上一篇:少時不識愛滋味 作文
  • 下一篇:蘋果手機耳機插孔在哪裏
  • copyright 2024編程學習大全網