RocketMQ 介紹
MQ 介紹
定義:
-
MQ(Message Queue,消息隊列)是一種用來保存消息數據的隊列。
-
隊列:數據結構的一種,特征為“先進先出”。
MQ 作用
-
應用解耦
-
快速的應用變更和維護
-
流量削鋒(削峰填谷)
MQ 缺點
- 系統可用性降低(解決:搭集群)
- 系統復雜度提高(解決:程序員提升水平)
- 異步消息機制(以下都有解決方案)
- 消息時序性
- 消息丟失
- 消息一致性
- 消息重復使用
MQ 常見產品
- ActiveMQ :Java 語言實現,萬級數據吞吐量,處理速度 ms 級,主從架構,成熟度高。
- RabbitMQ :Erlang 語言實現,萬級數據吞吐量,處理速度 us 級,主從架構。
- RocketMQ :
Java 語言實現,十萬級數據吞吐量,處理速度 ms 級,分布式架構,功能強大,擴展性強
。 - kafka :Scala 語言實現,十萬級數據吞吐量,處理速度 ms 級,分布式架構,功能較少,應用於大數據較多。
RocketMQ 簡介
RocketMQ 是阿里開源的一款非常優秀中間件產品,脫胎於阿里的另一款隊列技術 MetaQ,后捐贈給 Apache 基金會作為一款孵化技術,僅僅經歷了一年多的時間就成為 Apache 基金會的頂級項目。並且現在已經在阿里內部被廣泛應用,且經受住了多次雙十一的這種極致場景的壓力(2017 年的雙十一,RocketMQ 流轉的消息量達到了萬億級,峰值 TPS 達到 5600 萬)。
同時,它還解決了上述提到的所有的消息隊列的缺點。
RocketMQ 架構
RocketMQ 安裝
1)安裝 JDK
2)解壓 RocketMQ 安裝包(下載地址):unzip rocketmq-all-4.5.2-bin-release.zip
3)修改目錄名稱:mv rocketmq-all-4.5.2-bin-release rocketmq
4)調整 RocketMQ 的啟動內存:
-
RocketMQ 的默認內存占用非常高,一般需要 4-8G 的虛擬機 JVM 參數空間,因此可以通過更改 mqbroker 和 mqnamesrv 的配置來調整內存(調整的與當前虛擬機內存匹配即可,推薦 256m-128m)。
-
RocketMQ 有兩個啟動腳本:bin 目錄下的 runbroker.sh 和 runserver.sh,編輯如下內容,然后重新啟動 broker 。
# vi runserver.sh
JAVA_OPT=”${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
# vi runbroker.sh
JAVA_OPT=”${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn125m
- mqbroker 和 mqnamesrv 的內存也可以調整,這兩項配置也很重要,默認是 500m 到 1g 。具體文件配置是 mqbroker.xml 和mqnamesrv.xml(文件里面的配置信息根據自己的情況修改):
<options>
<-Xms200m></-Xms200m>
<-Xmx200m></-Xmx200m>
<-XX:NewSize>50M</-XX:NewSize>
<-XX:MaxNewSize>50M</-XX:MaxNewSize>
<-XX:PermSize>30M</-XX:PermSize>
<-XX:MaxPermSize>30M</-XX:MaxPermSize>
</options>
- 注意:mqbroker.xml 和 mqnamesrv.xml 的內存不要超過 runbroker.sh 和runserver.sh 的內存,不然會因為內存不夠導致崩潰。
**5)修改服務 IP **:
# vi conf/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUS
# 新增以下兩行內容,將IP地址改為本地虛擬機
# 若不增加以下內容,則MQ服務器地址將默認為公網 172.17.0.1:10911
brokerIP1 = 192.168.3.244
namesrvAddr = 192.168.3.244:9876
6)bin 目錄下啟動命名服務:
# 顯式啟動命名服務(默認端口 9876)
sh mqnamesrv
# 后台啟動
nohup sh mqnamesrv &
# 可以在當前目錄的 nohup.out 中查看日志輸出
7)bin 目錄下啟動消息服務:
# 顯式啟動消息服務,並指定命名服務的地址
sh mqbroker -n localhost:9876
# 后台啟動
nohup sh mqbroker -n localhost:9876 &
# 指定配置文件
sh mqbroker -n localhost:9876 -c ../conf/broker.conf
# 可以在當前目錄的 nohup.out 中查看日志輸出
8)關閉防火牆(供客戶端程序訪問):
# 暫時關閉防火牆
systemctl stop firewalld
# 永久設置防火牆狀態
systemctl enable firewalld.service # 打開
systemctl disable firewalld.service # 關閉
9)測試:
# 配置命名服務地址
export NAMESRV_ADDR=localhost:9876
# 啟動后產生大量日志信息(該信息是測試程序中自帶的,不具有通用性)
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
# 啟動后產生大量日志信息(該信息是測試程序中自帶的,不具有通用性)
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer