一、rocketmq概述
1.rocketmq介紹
1、RocketMQ是阿里巴巴在2012年開源的分布式消息中間件,是一個隊列模型的消息中間件,具有高性能、高可靠、高實時、分布式特點,可集群部署,先進先出處理模式。
2、topic是一個邏輯上的概念,實際上message是在每個broker上已queue的形式記錄。
2.優勢
1、異步解耦(A和B應用相互不依賴,中間有個第三方,A將信息全部同步到第三方,B在空閑時間可以將信息從第三方信息取出來,是異步的);
2、限流削峰
3.mq處理機制

4.mq物理架構

5.角色介紹
producer:消息發送者;舉例:發信者
consumer:消息接收者;舉例:收信者
broker:暫存和傳輸消息;舉例:郵局
nameserver:管理broker;舉例:各個郵件的管理機構
topic:區分消息種類;一個發送者可以發送消息給一個或多個topic;一個消息的接收者可以訂閱一個或多個topic消息
message queue:相當於topic的分區,用於並行發送
6.集群模式
6.1 單master模式
不推薦這種模式,這種風險比較大,一旦broker重啟或宕機時,會導致整個服務不能使用,可以用於測試。
6.2 多master模式
一個集群無slave,全是master。
優點:配置簡單,但是個master宕機或重啟應用服務無影響,在磁盤配置為RAID10時,即使機器宕機不可恢復情況下,由於RAID10磁盤非常可靠,消息也不會丟失(異步刷盤丟失少量信息,同步刷盤一條不會丟),性能最高;
缺點:單台機器宕機期間,這台機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會收到影響。
6.3 多master多slave模式(異步)
每個master配置一個slave,有多對master-slave,HA采用異步復制方式,主備有短暫消息延遲(毫秒級)。
優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,同時master宕機后,消費者仍然可以從slave消費,而且此過程對應用透明,不需要人工干預,性能同多master模式幾乎一樣。
缺點:master宕機,磁盤損壞情況下會丟失少量消息。
6.4 多master多slave模式(同步)
每個master配置一個slave,有多對master-slave,HA采用同步雙寫方式,即只有主備都寫成功,才向應用返回成功。
有點:數據與服務都無單點故障,master宕機情況下,消息無延遲,服務可用性與數據e
7.集群特點
1、NameServer是一個幾乎無狀態節點,可集群部署,節點之間無任何信息同步。
2、Broker部署相對復雜,Broker分為Master和Slave,一個Master可以對應多個Slave,但是一個Slave只能對應一個Master。
Master與Slave的對應關系通過指定相同的BrokerName,不同的BrokerId來定義,BrokerId為0時表示Master,不為0時為Slave
Master可以部署多個。每個Broker與NameServer集群中的所有節點建立長連接,定時注冊Topic信息到所有NameServer。
3、Producer與NameServer集群中的其中一個節點(隨機選擇)建立長連接,定期從NameServer取Topic路由信息,並向提供Topic服務的Master建立長連接,且定時向Master發送心跳。Producer完全無狀態,可集群部署。
4、Consumer與NameServer集群中的其中一個節點(隨機選擇)建立長連接,定期從NameServer取Topic路由信息,並向提供Topic服務的Master、Slave建立長連接,且定時向Master、Slave發送心跳。Consumer既可以從Master訂閱消息,也可以從Slave訂閱消息,訂閱規則由Broker配置決定。
二、rocketmq安裝與啟動
1.單機安裝與啟動
1.1 准備工作
軟硬件需求:系統是64位的,jdk版本是1.8及其以上的
1.2 下載rocketmq安裝包
下載地址:https://rocketmq.apache.org/
https://archive.apache.org/dist/rocketmq/
1.3 上傳至服務器並解壓
rz rocketmq-all-4.9.2-bin-release.zip
unzip rocketmq-all-4.9.2-bin-release.zip
1.4 修飾初始內存
cd /export/home/rocketmq/bin
vi bin/runserver.sh
vi bin/runbroker.sh
1.5 開始啟動
1.5.1 啟動name server
> nohup sh bin/mqnamesrv &
> tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
1.5.2 啟動broker
> nohup sh bin/mqbroker -n localhost:9876 &
> tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 192.168.1.1:10911] boot success...
1.6 發送和接收消息測試
1.6.1發送消息
> export NAMESRV_ADDR=localhost:9876
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
1.6.2 接收消息
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...
1.7 關閉服務
1.7.1 關閉broker
> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
1.7.2 關閉name server
> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
1.8 控制台安裝與啟動
1.8.1 下載地址:rocketmq-console-ng-1.0.1.jar包
1.8.2 使用命令啟動:
java -jar rocketmq-console-ng-1.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=192.168.1.1:9876 #192.168.1.1 對應的服務器地址
2.集群安裝與啟動
1.集群架構
雙主雙從異步復制的rocket集群
| 序號 | ip | 功能 | broker角色 |
| ---- | ------------ | ----------------- | -------------- |
| 1 | 192.168.1.1 | nameserver+broker | master1+slave2 |
| 2 | 192.168.1.2 | Nameserver+broker | master2+slave1 |
2.修改配置文件
192.168.1.1服務器1
2.1、修改 broker-a.properties
cd /export/home/rocketmq/conf/2m-2s-async
vi broker-a.properites
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
2.2、修改 broker-b-s.properties
vi broker-b-s.properties
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
listenPort=11911
storePathRootDir=~/store-s
storePathcommitLog=~/store-s/commitlog
storePathconsumeQueue=~/store-s/consumequeue
storePathIndex=~/store-s/index
storecheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort
192.168.1.2服務器2
2.3、修改 broker-a-s.properties
cd /export/home/rocketmq/conf/2m-2s-async
vi broker-a-s.properties
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
listenPort=11911
storePathRootDir=~/store-s
storePathcommitLog=~/store-s/commitlog
storePathconsumeQueue=~/store-s/consumequeue
storePathIndex=~/store-s/index
storecheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort
2.4、修改 broker-b.properties
vi broker-b.properites
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
3.啟動集群
3.1、啟動nameserver集群
192.168.1.1服務器1
cd /export/home/rocketmq
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
192.168.1.2服務器2
cd /export/home/rocketmq
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
3.2、啟動master集群
192.168.1.1服務器1
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
tail -f ~/logs/rocketmqlogs/broker.log
192.168.1.2服務器2
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties &
tail -f ~/logs/rocketmqlogs/broker.log
3.3、啟動slave集群
192.168.1.1服務器1
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log
192.168.1.2服務器2
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log
3.環境變量配置
3.1 環境變量配置
vi ~/.bash_profile
export ROCKETMQ_HOME=/export/home/rocketmq/rocketmq
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$ROCKETMQ_HOME/bin
export NAMESRV_ADDR="192.168.1.1:9876;192.168.1.2:9876"
3.2 jvm參數配置
vi $ROCKETMQ_HOME/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m"
vi $ROCKETMQ_HOME/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
note:RocketMQ 堆內存不能小於1G
3.3 控制台啟動
nohup java -jar rocketmq-console-ng-1.0.0.jar --server.port=8080 --rocketmq.config. namesrvAddr=192.168.1.1:9876 > ./logs/rocketmq-console.log 2>&1 &
4.mqadmin命令
4.1 topic選項

4.2 新增topic
sh /export/home/rocketmq/rocketmq/bin/mqadmin updateTopic -n '192.168.1.1:9876;192.168.1.2:9876' -b 192.168.1.13:10911 -t test111
sh /export/home/rocketmq/rocketmq/bin/mqadmin updateTopic -n '192.168.1.1:9876;192.168.1.2:9876' -c DefaultCluster -r 16 -w 16 -p 6 -t LOG_PRESENT
4.3 刪除topic
sh /export/home/rocketmq/rocketmq/bin/mqadmin deleteTopic -n '192.168.1.1:9876;192.168.1.2:9876' -c AdpMqCluster -t test111
4.4 查詢集群信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin clusterList -n '192.168.1.1:9876;192.168.1.2:9876'
4.5 查詢所有topic列表信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin topicList -n '192.168.1.1:9876;192.168.1.2:9876'
4.6 查詢topic路由信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin topicRoute –n '192.168.1.1:9876;192.168.1.2:9876' –t SMS_TOPIC
4.7 查詢topic詳細信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin topicstatus –n '192.168.1.1:9876;192.168.1.2:9876' –t SMS_TOPIC
4.8 查詢消費情況
sh /export/home/rocketmq/rocketmq/bin/mqadmin consumerProgress -n '192.168.1.1:9876;192.168.1.2:9876'