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 里