RocketMQ是一個分佈式、隊列模型的開源消息中間件,前身是MetaQ,是阿里研發的一個隊列模型的消息中間件,後開源給apache基金會成爲了apache的頂級開源項目,具備高性能、高可靠、高實時、分佈式特色,java
同時,普遍應用於多個領域,包括異步通訊解耦、企業解決方案、金融支付、電信、電子商務、快遞物流、廣告營銷、社交、即時通訊、移動應用、手遊、視頻、物聯網、車聯網等。數據庫
具備如下特色:apache
NameServer (名稱服務器):服務器
Broker(消息服務器): 消息存儲中心,接收來自 Producer 的消息並存儲, Consumer 從這裏取得消息架構
Producer (生產者):併發
Consumer(消費者):異步
Broker Server負責消息的存儲和傳遞,消息查詢,HA高可用等,Broker Server幾個主要模塊組成:async
Remoting Module(遠程模塊):broker入口,處理來自客戶端的請求分佈式
Client Manager(客戶端管理):管理client(生產者/消費者)並維護消費者的主題訂閱性能
Store Service(存儲服務):提供簡單的API中數據庫中存儲或查詢消息
HA Service(高可用服務):提供master broker和slave broker之間的數據同步功能
Index Service(索引服務):將message創建索引來提供快速的查詢能力
Broker 啓動,跟全部的 Namesrv 保持長鏈接,定時發送心跳包
Producer 發送消息
Consumer 消費消息
Topic(主題): 表示消息的第一級類型,是最細粒度的訂閱單位(生產者傳遞消息和消費者提取消息標識)
Tag(標籤): 表示消息的第二級類型,能夠是使用相同的Topic不一樣的Tag來表示同一業務模塊的不一樣任務的消息,好比交易消息又能夠分爲:交易建立消息,交易完成消息等
Message(消息體): 消息是要傳遞的信息。 Message中必須包含一個Topic,可選Tag和key-vaule鍵值對
Message Queue(消息隊列): 全部消息隊列都是持久化
Group(組): 分爲Producer Group(生產者組)和Consumer Group(消費者組),具備相同角色組成Group
Message Model(消息模式):
Message Order(消息順序)
使用DefaultMQPushConsumer時,能夠決定按順序或同時使用消息
若是指定按順序使用,則消息使用的最大併發度是使用者組訂閱的消息隊列數
在此模式下再也不保證消息順序
Message Types(消息類型)
下載編譯源碼
# 下載$ > wget wget http://mirror.bit.edu.cn/apache/rocketmq/4.6.0/rocketmq-all-4.6.0-source- > # 解壓$ >unzip rocketmq-all-4.7.0-source-release.zip > cd rocketmq-all-4.7.0/ # 編譯$ > mvn -Prelease-all -DskipTests clean install -U > cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
啓動 Name Server
# 啓動 Name Server 服務 > nohup sh bin/mqnamesrv & # 啓動完成後,查看日誌$ > tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...
啓動 Broker
在 conf
目錄下,RocketMQ 提供了多種 Broker 的配置文件:
broker.conf
:單主,異步刷盤。2m/
:雙主,異步刷盤。2m-2s-async/
:兩主兩從,異步複製,異步刷盤。2m-2s-sync/
:兩主兩從,同步複製,異步刷盤。dledger/
:Dledger 集羣,至少三節點# 啓動 Broker服務 > nohup sh bin/mqbroker -n localhost:9876 & # 啓動完成後,查看日誌$ > tail -f ~/logs/rocketmqlogs/broker.log The broker[%s, 172.30.30.233:10911] boot success...
其中,參數:
-c
參數,配置讀取的主 Broker 配置-n
參數,設置 RocketMQ Namesrv 地址Send & Receive Messages(消息發送與接收)
在發送/接收消息以前,咱們須要告知client(生產者/消費者)Name Servers的地址。 RocketMQ提供了多種方法來實現:
爲簡單起見,咱們使用環境變量:NAMESRV_ADDR,以下所示:
# 設置 Name Servers的地址$ > export NAMESRV_ADDR=localhost:9876 # 生產消息$ > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer SendResult [sendStatus=SEND_OK, msgId= ... # 消費消息$ > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer ConsumeMessageThread_%d Receive New Messages: [MessageExt...
各位看官還能夠嗎?喜歡的話,動動手指點個💗,點個關注唄!!謝謝支持!歡迎關注公衆號【Ccww技術博客】,原創技術文章第一時間推出