Apache RocketMQ 是阿里開源的一款高性能、高吞吐量的分布式消息中間件.
官網:http://rocketmq.apache.org/
特點
- 支持 Broker 和 Consumer 端消息過濾
- 支持發布訂閱模型,和點對點,
- 支持拉 pull 和推 push 兩種消息模式
- 單一隊列百萬消息、億級消息堆積
- 支持單 master 節點,多 master 節點,多 master 多 slave 節點
- 任意一點都是高可用,水平拓展,Producer、Consumer、隊列都可以分布式
- 消息失敗重試機制、支持特定 level 的定時消息
- 新版本底層采用 Netty
- 4.3.x 支持分布式事務
- 適合金融類業務,高可用性跟蹤和審計功能。
概念
- Producer:消息生產者
- Producer Group:消息生產者組,發送同類消息的一個消息生產組
- Consumer:消費者
- Consumer Group:消費同類消息的多個實例
- Tag:標簽,子主題(二級分類)對 topic 的進一步細化,用於區分同一個主題下的不同業務的消息
- Topic:主題, 如訂單類消息,queue 是消息的物理管理單位,而 topic 是邏輯管理單位。一個 topic 下可以有多個 queue,默認自動創建是4個,手動創建是8個
- Message:消息,每個 message 必須指定一個 topic
- Broker:MQ 程序,接收生產的消息,提供給消費者消費的程序
- Name Server:給生產和消費者提供路由信息,提供輕量級的服務發現、路由、元數據信息,可以多個部署,互相獨立(比 zookeeper 更輕量)
- Offset: 偏移量,可以理解為消息進度
- commit log: 消息存儲會寫在 Commit log 文件里面
學習資源:http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/
安裝前提條件(推薦) 64bit OS,Linux/Unix/Mac 64bit(Windows 不兼容),JDK 1.8+;
快速開始 http://rocketmq.apache.org/docs/quick-start/
這里以 Centos 7.2 虛擬機為例
安裝 JDK1.8
第一步:獲取 JDK1.8 安裝包
地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
第二步:解壓安裝包
新建一個文件夾,用來放置安裝包(當然可以使用任意文件夾)進到目錄 /usr/local/software
解壓:tar -zxvf jdk-8u201-linux-x64.tar.gz
重命名:mv jdk1.8.0_201 jdk8
注意:解壓后生成的文件夾是: jdk1.8.0_201,我這里重命名的目的是為了方便自己看,其實不重命名也無所謂
第三步:配置環境變量
vim /etc/profile
加入以下配置
export JAVA_HOME=/usr/local/software/jdk8 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH
使用 source /etc/profile 讓配置立刻生效
注意:JAVA_HOME 以自己實際情況為准。我這里的是:/usr/local/software/jdk8
安裝 Maven
第一步:獲取安裝包
地址:http://maven.apache.org/download.cgi
第二步:解壓安裝包
解壓:tar -zxvf apache-maven-3.6.0-bin.tar.gz
重命名: mv apache-maven-3.6.0 maven
第三步:配置環境變量
vim /etc/profile
加入以下配置
export PATH=/usr/local/software/maven/bin:$PATH
使用 source /etc/profile 讓配置立刻生效
安裝 RocketMQ4.X
第一步:獲取安裝包
地址:https://mvnrepository.com/search?q=mybatis
第二步:解壓編譯安裝包
unzip rocketmq-all-4.4.0-source-release.zip cd rocketmq-all-4.4.0/ mvn -Prelease-all -DskipTests clean install -U
注意:我這里是重命名過的文件夾,原本的文件夾名稱是:rocketmq-all-4.4.0
第三步:啟動
啟動 nameServer
cd /usr/local/software/rocketmq-all-4.4.0/distribution/target/apache-rocketmq nohup sh bin/mqnamesrv &
查看日志 tail -f nohup.out (結尾:The Name Server boot success. serializeType=JSON 表示啟動成功)
啟動 broker (-n指定nameserver地址,nameserver服務端口為9876,broker默認端口10911)
cd /usr/local/software/rocketmq-all-4.4.0/distribution/target/apache-rocketmq nohup sh bin/mqbroker -n localhost:9876 &
關閉 nameserver broker 執行的命令
cd /usr/local/software/rocketmq-all-4.4.0/distribution/target/apache-rocketmq sh bin/mqshutdown broker sh bin/mqshutdown namesrv
使用 jps 查看進程
第四步:測試
cd /usr/local/software/rocketmq-all-4.4.0/distribution/target/apache-rocketmq #設置名稱服務地址 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...
安裝 RocketMQ 控制台
第一步:獲取源碼包
第二步:解壓源碼包
第三步:修改配置文件和 pom 文件
原本這里的版本是快照版本,這里修改為正式版本(也就是把快照后綴刪除即可)
這里修改為實際內網地址,集群部署的話,多個地址用英文分號分隔
第四步:進入pom文件所在目錄,使用 mvn clean package -Dmaven.test.skip=true 命令打包
第五步:進入 target 目錄 ,使用命令啟動: java -jar rocketmq-console-ng-1.0.0.jar
守護進程方式啟動命令: nohup java -jar rocketmq-console-ng-1.0.0.jar &
常見問題
-
NameServer內存不夠怎么處理
-
找到 runserver.sh 修改 JAVA_OPT
報錯問題如下 [root@iZwz94sw188z3yfl7lpmmsZ apache-rocketmq]# sh bin/mqnamesrv Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release. Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006ec800000, 2147483648, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 2147483648 bytes for committing reserved memory. # An error report file with more information is saved as: # /usr/local/software/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/hs_err_pid8993.log 解決如下 編輯 bin/runserver.sh: JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
-
-
Broker內存不足
-
找到 runbroker.sh 修改 JAVA_OPT
-
JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"
-
注意:runserver.sh 和 runbroker.sh 這兩個文件在目錄 /usr/local/software/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/bin 里