RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。
目前RocketMQ在阿里云上有一个购买即可用的商业版本,商业版本集成了阿里内部一些更深层次的功能及运维定制。我们这里学习的是Apache的开源版本。开源版本相对于阿里云上的商业版本,功能上略有缺失,但是大体上功能是一样的。
官网地址: http://rocketmq.apache.org
github地址:https://github.com/apache/rocketmq
vim /etc/profile
export ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-4.7.1-bin-release
export PATH=$ROCKETMQ_HOME/bin:$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
# 令环境变量生效
source /etc/profile
运行之前,需要对RocketMQ的组件结构有个大体了解:
所以我们要启动RocketMQ服务,需要先启动NameServer。
启动NameServer非常简单, 在$ROCKETMQ_HOME/bin目录下有个mqadminsrv。直接执行这个脚本就可以启动RocketMQ的NameServer服务。
但是要注意,RocketMQ默认预设的JVM内存是4G,这是RocketMQ给我们的最佳配置。但是通常我们用虚拟机的话都是不够4G内存的,所以需要调整下JVM内存大小。修改的方式是直接修改runserver.sh。 用vi runserver.sh编辑这个脚本,在脚本中找到这一行调整内存大小为512M
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m
- XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
用静默方式启动NameServer
# 启动之前先授权
chmod +x mqadmin mqbroker mqshutdown mqnamesrv
# 启动NameServer
nohup ./mqnamesrv &
# 启动后查看nohup.out文件,
# 发现 The Name Server boot success. serializeType=JSON,启动成功
# 并且jps可以发现一个NamesrvStartup进程
tail -f nohup.out
启动Broker的脚本是runbroker.sh。Broker的默认预设内存是8G,启动前,如果内存不够,同样需要调整下JVM内存。vi runbroker.sh,找到这一行,进行内存调整:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
然后我们需要找到$ROCKETMQ_HOME/conf/broker.conf, vi指令进行编辑,在最下面加入一个配置:
# 允许自动创建主题
autoCreateTopicEnable=true
然后也以静默启动的方式启动runbroker.sh
nohup ./mqbroker &
启动完成后,同样是检查nohup.out日志,有这一条关键日志就标识启动成功了。 并且jps指令可以看到一个BrokerStartup进程。
The broker[worker1, 192.168.232.128:10911] boot success. serializeType=JSON
*在观察runserver.sh和runbroker.sh时,我们还可以查看到其他的JVM执行参数,这些参数都可
以进行定制。例如一个比较有意思的地方,nameServer使用的是CMS垃圾回收器,而Broker使用的是G1垃圾回收器。 *
在RocketMQ的安装包中,提供了一个tools.sh工具可以用来在命令行快速验证RocketMQ服务。
export NAMESRV_ADDR='localhost:9876'
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
日志中MessageExt后的整个内容就是一条完整的RocketMQ消息。其中比较关键的属性有:brokerName,queueId,msgId,topic,cluster,tags,body,transactionId。
# 1.关闭NameServer
sh bin/mqshutdown namesrv
# 2.关闭Broker
sh bin/mqshutdown broker