一、概述
RocketMQ是一款分佈式、隊列模型的消息中間件,具有以下特點:
A、能夠保證嚴格的消息順序;
B、提供豐富的消息拉取模式;
C、高效的訂閱者水平擴展能力;
D、實時的消息訂閱機制;
E、億級消息堆積能力;
F、Metaq1.x和2.x,3.x下以後版本名,產品名稱改爲RocketMQ選用理由: A、強調集羣無單點,可擴展,任意一點高可用,水平可擴展; B、海量消息堆積能力,消息堆積後,寫入低延遲; C、支持上萬個隊列; D、消息失敗重試機制; E、消息可查詢; F、開源社區活躍; G、成熟度(經過雙十一考驗);
二、專業術語
- Producer:消息生產者,負責生產消息,一般由業務系統負責產生消息; Consumer:消息消費者,負責消費消息,一般是後臺系統負責異步消費; Push Consumer:Consumer的一種,應用通常向Consumer對象註冊一個Listener接口,一旦受到消息,立刻回掉Listener接口方法; Pull Consumer:Consumer的一種,應用通常主動調用Consumer的拉消息方法從Broker拉消息,主動權應用控制; Producer Group:一類Producer的集合名稱,這類Producer通常發送一類消息,且發送邏輯一致; Consumer Group:一類Consumer的集合名稱,這類Consumer通常消費一類消息,且消費邏輯一致; Broker:消息中轉角色,負責存儲消息,轉發消息,一般也成爲Server,在JMS規範中稱爲Provider。 廣播消費:一條消息被多個Consumer消費,計時這些Consumer屬於同一個Consumer Group,消息也會被Consumer Group中的每個Consumer都消費一次,廣播消費中的Consumer Group概念可以認爲在消息劃分方面無意義。 集羣消費:一個Consumer Group中的Consumer實例平均分攤消費消息。 在JMS規範中,JMS point-to-point model與之類似,但是RocketMQ的集羣消費功能大等於PTP模型。因爲ROcket MQ單個Consumer Group內的消費者類似於PTP,但是一個Topic/Queue可以被多個Consumer Group消費。 順序消息:消費消息的順序要同發送消息的順序一致,在RocketMQ中,主要指的是局部順序,即一類消息爲滿足順序性,必須Producer單線程順序發送,且發送到同一個隊列,這樣Consumer就可以按照Producer發送的順序去消費消息。
三、RocketMQ環境搭建
- 雙/多master配置方式: 0、服務器環境:
1、命令:(每個master都要修改)vim /etc/hosts
IP:192.168.100.24 ;NAME:rocketmq-nameserver1
IP:192.168.100.24 ;NAME:rocketmq-master1
IP:192.168.100.25 ;NAME:rocketmq-nameserver2
2、命令:service network restart
3、命令:tar -zxvf alibaba-rocketmq-3.4.2.6.tar.gz -C /usr/local/
4、創建軟連接,命令:ln -s alibaba-rocketmq-3.4.2.6 rocketmq
5、創建存儲路勁,命令:mkdir /usr/local/rocketmq/store
命令:mkdir /usr/local/rocketmq/store/commitlog
命令:mkdir /usr/local/rocketmq/store/consumequeue
命令:mkdir /usr/local/rocketmq/store/index
6、修改RocketMQ配置文件,命令:vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
內容如下:
#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0表示Master,>0表示Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許Broker自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許Broker自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscritionGroup=true
#Broker對外服務的監聽端口
listentPort=10911
#刪除文件時間點,默認凌晨4點
deleteWhen=04
#文件保留時間,默認48小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30w條,根據業務情況調整
ConsumeQueue=300000
#destroyMapedFileIntervalFocibly=120000
#redeleteHangedFileInterval=120000
#檢查物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort文件存儲路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushConsumeQueueLeastages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker的角色
#-ASYNC_MASTER以不復制Master
#-SYNC_mATER 同步雙寫Master
brokerRole=ASYNC_MASTER
#磁盤方式
#-ASYNC_FLUSH異步刷盤
#-SYNC_FLUSH同步刷盤 flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程數量
#sendMessagethreadPoolNums=128
#拉消息線程池數量
(重複上面內容修改操作)
vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties
7、修改日誌配置文件【兩臺機器】,命令:mkdir -p /usr/local/rocketmq/logs
命令:cd/usr/local/rocketmq/conf && sed-i's#${usr.home}#/usr/local/rocketmq#g'*.xml
8、修改啓動腳本參數【兩臺機器】
vim /usr/local/rocketmq/bin/runbroker.sh
修改內容:
JAVA_OPT=”${JAVA_OPT} -server -Xmx1g -Xmn512m -XX:PermSize=128m
vim /usr/local/rocketmq/bin/runserver.sh
修改內容:
JAVA_OPT=”${JAVA_OPT} -server -Xmx1g -Xmn512m -XX:PermSize=128m
9、啓動 NameServer【兩天機器】,命令:cd/usr/local/rocket/bin
nohup sh mqnamesrv &
10、啓動Broker Server A 【192.168.100.24】
命令:nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
命令:netstat -ntlp
命令:jps
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
11、啓動BrokerServer B 【192.168.100.25】
命令:nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
命令:netstat -ntlp
命令:jps
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
12、解壓Tomcat,命令:tar -zxvf apache-tomcat-7.029.tar.gz -C /usr/local
13、進入tomcat,命令:cd apache-tomcat-7.0.29/webapps/
,上傳rocketmq-console控制檯war包
14、命令:mikdir /usr/local/rocketmq-console
15、解壓rocketmq-console.war到rocketmq-console文件夾中,命令:unzip rocketmq-console.war -d rocketmq-console
16、進入rocketmq-console中的web-inf的class文件,命令:cd rocketmq-console/
,命令:cd WEB-INF
,命令:cd class/
17、修改配置文件,命令:vim config.properties
配置完成,可以啓動
18、啓動tomcat,命令:/usr/local/apache-tomcat-7.0.29/bin/startup.sh
19|、查看啓動結果,命令:jps
20、查看tomcat日誌,命令:tail -f -n 500 /usr/local/apache-tomcat-7.0.29/logs/catalina.out