RocketMQ的安装

342 阅读5分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

一、什么是RocketMQ?

RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。目前RocketMQ在阿里云上有一个购买即可用的商业版本,商业版本集成了阿里内部一些更深层次的功能及运维定制。我们这里学习的是Apache的开源版本。开源版本相对于阿里云上的商业版本,功能上略有缺失,但是大体上功能是一样的。

RocketMQ的官网地址: rocketmq.apache.org ,github地址是 github.com/apache/rock…

二、安装与配置RocketMQ

gitCode分享

RocketMQ源码版本下载地址:

gitcode.net/java_wxid/r…

百度网盘分享

RocketMQ运行版本下载地址:

链接:pan.baidu.com/s/1mqfO8bpQ…

提取码:2022

RocketMQ源码版本下载地址:

链接:pan.baidu.com/s/1NbgSuv89…

提取码:2022

官方下载地址

RocketMQ运行版本下载地址:

www.apache.org/dyn/closer.…

RocketMQ源码版本下载地址:

www.apache.org/dyn/closer.…

安装配置

查看linux版本

uname -a

创建一个操作用户,用来运行自己的程序,与root用户区分开。使用root用户创建一个oper用户,并给他创建一个工作目录,设置用户密码

useradd liaozhiwei
passwd liaozhiwei
mkdir /opt/rocketmq
cd /opt/rocketmq
chown liaozhiwei:liaozhiwei /opt/rocketmq

运行RocketMQ需要先安装JDK。我们采用目前最稳定的JDK1.8版本。可以自行去Oracle官网上下载也可以使用我从官网拉下来的jdk版本。

链接:pan.baidu.com/s/10YA9SBV7…

提取码:2022

然后用FTP或者WSP上传到liaozhiwei用户的工作目录下。由liaozhiwei用户解压到/opt/jdk目录下。

tar -zxvf jdk-8u301-linux-x64.tar.gz

继续上传RocketMQ到/opt/rocketmq目录下,由于我们上传的包是zip的包,解压需要通过解压工具,所以我们安装一个

yum install unzip zip

然后解压

unzip rocketmq-all-4.7.1-bin-release.zip

配置环境变量。使用vim /etc/profile编辑文件,在文件尾部添加以下内容

###java环境配置
export JAVA_HOME=/opt/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=./:JAVA_HOME/lib:$JRE_HOME/lib
###RocketMQ环境配置
export ROCKETMQ_HOME=/opt/rocketmq
###path
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:$JAVA_HOME/bin:$ROCKETMQ_HOME/bin:$PATH

编辑完成后,通过:wq保存退出,执行source /etc/profile让环境变量生效。输入java -version能查看到以下内容表明JDK安装成功了。

ROCKETMQ_HOME的环境变量是必须要单独配置的,如果不配置的话,启动NameSever和Broker都会报错。

这个环境变量的作用是用来加载$ROCKETMQ_HOME/conf下的除broker.conf以外的几个配置文件。所以实际情况中,可以不按这个配置,但是一定要能找到配置文件。

三、快速运行RocketMQ

\

运行之前,我们需要对RocketMQ的组件结构有个大致的了解。

\

RocketMQ组件

\

RocketMQ由以下这几个组件组成

\

NameServer : 提供轻量级的Broker路由服务。
Broker:实际处理消息存储、转发等服务的核心组件。
Producer:消息生产者集群。通常是业务系统中的一个功能模块。
Consumer:消息消费者集群。通常也是业务系统中的一个功能模块。

\

所以我们要启动RocketMQ服务,需要先启动NameServer。\

四、启动NameServer

\

启动NameServer非常简单, 在$ROCKETMQ_HOME/bin目录下有个mqnamesrv。直接执行这个脚本就可以启动RocketMQ的NameServer服务。

\

但是要注意,RocketMQ默认预设的JVM内存是4G,这是RocketMQ给我们的最佳配置。但是通常我们用虚拟机的话都是不够4G内存的,所以需要调整下JVM内存大小。修改的方式是直接修改runserver.sh。 用

vim /opt/rocketmq/bin/runserver.sh

编辑这个脚本,在脚本中找到这一行调整内存大小为512M

\

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -
XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

授权

chmod 777 /opt/rocketmq/bin/mqnamesrv

然后我们用静默启动的方式启动NameServer服务:

\

nohup /opt/rocketmq/bin/mqnamesrv > /opt/rocketmq/nameServerLog 2>&1 &

\

启动完成后,在nohup.out里看到这一条关键日志就是启动成功了。并且使用jps指令可以看到有一个NamesrvStartup进程。

cat /opt/rocketmq/nameServerLog

主要尽量将文件夹的名字进行调整,不用多余的特殊字符

五、启动Broker

\

启动Broker的脚本是runbroker.sh。Broker的默认预设内存是8G,启动前,如果内存不够,同样需要调整下JVM内存。

vim /opt/rocketmq/bin/runbroker.sh

找到这一行,进行内存调整

\

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

\

然后我们需要找到$ROCKETMQ_HOME/conf/broker.conf, vim指令进行编辑,在最下面加入一个配置:

 vim /opt/rocketmq/conf/broker.conf
autoCreateTopicEnable=true

授权

chmod 777 /opt/rocketmq/bin/mqbroker

然后也以静默启动的方式启动runbroker.sh

\

nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/broker.conf -n localhost:9876 > /opt/rocketmq/brokerlog 2>&1 &

\

启动完成后,同样是检查nohup.out日志,有这一条关键日志就标识启动成功了。 并且jps指令可以看到一个BrokerStartup进程。

查看brokerlog日志文件

cat /opt/rocketmq/brokerlog

在观察runserver.sh和runbroker.sh时,我们还可以查看到其他的JVM执行参数,这些参数都可以进行定制。例如我们观察到一个比较有意思的地方,nameServer使用的是CMS垃圾回收器,而Broker使用的是G1垃圾回收器。

\

六、命令行快速验证

\

在RocketMQ的安装包中,提供了一个tools.sh工具可以用来在命令行快速验证RocketMQ服务。我们在worker2上进入RocketMQ的安装目录:

授权命令

chmod 777 /opt/rocketmq/bin/tools.sh

然后启动消息生产者发送消息:默认会发1000条消息

\

 /opt/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

\

我们可以看到发送消息的日志:

这日志中,上面部分就是我们发送的消息的内容。后面两句标识消息生产者正常关闭。

\

然后启动消息消费者接收消息:

\

 /opt/rocketmq/bin/tools.sh  org.apache.rocketmq.example.quickstart.Consumer

\

启动后,可以看到消费到的消息。

\

\

日志中MessageExt后的整个内容就是一条完整的RocketMQ消息。我们要对这个消息的结构有个大概的了解,后面会对这个消息进行深入的理解。

其中比较关键的属性有:brokerName,queueId,msgId,topic,cluster,tags,body,transactionId。先找下这些属性在哪里。

\

而这个Consume指令并不会结束,他会继续挂起,等待消费其他的消息。我们可以使用CTRL+C停止该进程。\

七、关闭RocketMQ服务

\

要关闭RocketMQ服务可以通过mqshutdown脚本直接关闭

授权

chmod 777 /opt/rocketmq/bin/mqshutdown

1.关闭NameServer

sh /opt/rocketmq/bin/mqshutdown namesrv

2.关闭Broker

sh /opt/rocketmq/bin/mqshutdown broker