RocketMQ簡介
1.RocketMQ是一款分佈式、隊列模型的消息中間件,是阿里巴巴集團自主研發的專業消息中間件,借鑑參考了JMS規範的MQ實現,更參考了優秀的開源消息中間件KAFKA,實現了業務消峯、分佈式事務的優秀框架。
2.其底層代碼編寫清晰優秀,採用Netty NIO框架進行數據通信
3.摒棄了Zookeeper,內部使用更輕量級的NameServer進行網絡路由,提高服務性能,並且支持消息失敗重試機制。
4.天然支持集羣模型,消費者負載均衡、水平擴展能力,支持廣播模式和集羣模式。
5.採用零拷貝的原理、順序寫盤、支持億級消息堆積能力。
6.提供豐富的消息機制,如順序消息、事務消息等
MQ基本概念:
Message:消息,消息隊列中信息傳遞的載體。
Message ID:消息的全局唯一標識,由 MQ 系統自動生成,唯一標識某條消息。
Message Key:消息的業務標識,由消息生產者(Producer)設置,唯一標識某個業務邏輯。
Topic:消息主題,一級消息類型,通過 Topic 對消息進行分類。
Tag:消息標籤,二級消息類型,用來進一步區分某個 Topic 下的消息分類。
Producer:消息生產者,也稱爲消息發佈者,負責生產併發送消息。
Producer ID:一類 Producer 的標識,這類 Producer 通常生產併發送一類消息,且發送邏輯一致。
Consumer:消息消費者,也稱爲消息訂閱者,負責接收並消費消息。
Consumer ID:一類 Consumer 的標識,這類 Consumer 通常接收並消費一類消息,且消費邏輯一致。
RocketMQ組件:
-
nameserver: 可以理解爲是消息隊列的協調者,Broker向它註冊路由信息,同時Client向其獲取路由信息,如果使用過Zookeeper,就比較容易理解了,但是功能比Zookeeper弱;
NameServer本身是沒有狀態的,並且多個NameServer直接並沒有通信,可以橫向擴展多臺,Broker會和每一臺NameServer建立長連接; -
Broker: Broker是RocketMQ的核心,提供了消息的接收,存儲,拉取等功能,一般都需要保證Broker的高可用,所以會配置Broker Slave,當Master掛掉之後,Consumer然後可以消費Slave;
Broker分爲Master和Slave,一個Master可以對應多個Slave,Master與Slave的對應關係通過指定相同的BrokerName,不同的BrokerId來定義,BrokerId爲0表示Master,非0表示Slave; -
Producer: 消息隊列的生產者,需要與NameServer建立連接,從NameServer獲取Topic路由信息,並向提供Topic服務的Broker Master建立連接;Producer無狀態,看集羣部署;
-
Consumer: 消息隊列的消費者,同樣與NameServer建立連接,從NameServer獲取Topic路由信息,並向提供Topic服務的Broker Master,Slave建立連接;
命令行管理工具
mqadmin是RocketMQ自帶的命令行管理工具,可以創建、修改Topic,查詢消息,更新配置信息等操作
登錄控制檯:
首先進入RocketMQ工程,進入/RocketMQ/bin
在該目錄下有個mqadmin腳本
查看幫助:
在mqadmin下可以查看有哪些命令
sh mqadmin
查看具體命令的使用
sh mqadmin help 命令名稱
例如,查看updateTopic的使用
sh mqadmin help updateTopic
使用命令
以創建topic爲例
指令 updateTopic
參數
-b 如果 -c爲空,則必填 broker地址,表示topic建在該broker
-c 如果 -b爲空,則必填 cluster名稱,表示topic建在該集羣(集羣可通過clusterList查詢)
-h 選填 打印幫助
-n 必填 nameserve服務地址列表,格式ip:port;ip:port;…
-p 選填 指定新topic的權限限制( W|R|WR )
-r 選填 可讀隊列數(默認爲8)
-w 選填 可寫隊列數(默認爲8)
-t 必填 topic名稱
舉例
在集羣DefaultCluster上創建主題ZTEExample,nameserve地址爲10.45.47.168:9876
sh mqadmin updateTopic –n 10.45.47.168 –c DefaultCluster –t ZTEExample