Linux安装部署RocketMQ
引言
阿里巴巴其中一个核心分布式技术是RocketMq ,作为一款分布式的消息中间件,经过了淘宝双十一的洗礼,在功能和性能上远超过activeMq
1.要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。
2.RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证!
3.RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟!
4.丰富的消息拉取模式(Push or Pull)
Push好理解,比如在消费者端设置Listener回调;而Pull,控制权在于应用,即应用需要主动的调用拉消息方法从Broker获取消息,这里面存在一个消费位置记录的问题(如果不记录,会导致消息重复消费)
5.在Metaq1.x/2.x的版本中,分布式协调采用的是Zookeeper,而RocketMQ自己实现了一个NameServer,更加轻量级,性能更好!
6.消息失败重试机制、高效的订阅者水平扩展能力、强大的API、事务机制等等(后续详细介绍)
引用自: https://www.jianshu.com/p/3afd610a8f7d
安装步骤
1. 安装JAVA
2. 安装RocketMQ
- 获取RocketMQ
在github上找到对应的版本,获取到下载链接,https://github.com/apache/rocketmq/releases 点击对应的版本,右键获取复制链接地址,得到 https://github.com/apache/rocketmq/archive/refs/tags/rocketmq-all-4.9.1.tar.gz
- 执行Linux命令
# 进入下载目录
> cd /usr/local
# 通过 wget 命令下载 rocketmq 源码包
> wget https://github.com/apache/rocketmq/archive/rocketmq-all-4.7.1.tar.gz
# 解压源码包
> tar -zxvf rocketmq-all-4.7.1.tar.gz
3. 安装Maven
由于下载的RocketMQ是源码,需对源码进行编译,我们选择用 maven 进行编译
- 获取Maven
通过Maven官方网站 https://maven.apache.org/download.cgi,找到需要下载的Maven版本,这里我们选择 Maven-3.8.3 https://dlcdn.apache.org/maven/maven-3/3.8.3/binaries/apache-maven-3.8.3-bin.tar.gz - 安装 Maven
# 进入下载目录
> cd /usr/local
# 通过 wget 命令下载 maven 包
> wget https://dlcdn.apache.org/maven/maven-3/3.8.3/binaries/apache-maven-3.8.3-bin.tar.gz
# 解压 Maven
> tar -zxvf apache-maven-3.8.3-bin.tar.gz
# 修改 Maven 配置文件,配置 Maven 镜像库
> vim /usr/local/apache-maven-3.8.3/conf/setting.xml
找到Maven配置文件中"mirrors"标签对,添加如下配置
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
接下来我们配置Linux环境变量
# 查看linux配置文件
> vim /etc/profile
# 在文件的最下面添加以下内容
# 配置变量 MAVEN_HOME
MAVEN_HOME=/usr/local/apache-maven-3.8.3
export MAVEN_HOME
# 配置 PATH 路径,添加 ${PATH} 的目的是引用之前配置的 PATH
export PATH=${PATH}:${MAVEN_HOME}/bin
# 保存修改
> [Esc]:wq!
# 手动刷新配置文件生效
> source /etc/profile
我们可以通过 mvn -v 来验证 maven 是否安装成功
# 执行 maven 命令, -v 查看 maven 版本
> mvn -v
# 出现下列信息即为安装成功
Maven home: /usr/local/apache-maven-3.8.3
Java version: 1.8.0_162, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_162/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.11.1.el7.x86_64", arch: "amd64", family: "unix"
参考文档:Linux环境变量配置全攻略
4. 编译RocketMQ
当相关软件都配置好后,我们便可对RoekctMQ源码进行编译
# 进入到 RokcetMQ 目录下
> cd /usr/local/rocket-rocketmq-all-4.7.1
# 执行 maven 编译命令
> mvn -Prelease-all -DskipTests clean install -U
执行结果如图所示,出现"BUILD SUCCESS"即为编译成功:
编译成功后会生成新的目录
/usr/local/rocketmq-rocketmq-all-4.7.1/distribution/target/rocketmq-4.7.1 即为编译后的 RocketMQ
我们可以选择将其移动到其他目录,方便操作
# 这里我选择将其移动到 /usr/local 下
> mv /usr/local/rocketmq-rocketmq-all-4.7.1/distribution/target/rocketmq-4.7.1 /usr/local/rocketmq-4.7.1
5. 启动RocketMQ
至此为止,我们的RocketMQ安装即完成了一大部分,此时只需正常启动即可
# 进入到 rocketmq 目录下
> cd /usr/local/rocket-4.7.1
# 这里我们选择将日志文件放入 /data/mq/krocketmq/nameserver.log中,先创建日志目录
> mkdir /data/mq/rocketmq
# 启动 namesrv
> nohup sh bin/mqnamesrv > /data/mq/rocketmq/nameserver.log 2>&1 &
# 启动 broker
> nohup sh bin/mqbroker -n 127.0.0.1:9876 -c conf/broker.conf autoCreateTopicEnable=true > /data/mq/rocketmq/broker.log 2>&1 &
# 查看启动信息
> jps -lm
通过 jps 我们可以看到如下信息,即表示 rocketmq 启动成功了
这里有个小坑,启动 broker 时会提示错误,但仔细查看错误日志的时候发现,提示内存不足
这是因为 rocketmq 启动时默认分配的内存太大,而系统实际的内存不足以为其提供如此大的内存
打开 runbroker.sh 文件,我们会看到如下配置
我们只需要修改启动时分配的内存
-server -Xms128m -Xmx256m -Xmn256m
保存配置后重新启动 broker
参考文档:RocketMQ踩坑记
6. 测试RocketMQ
现在我们需要测试一下 RocketMQ 是否正常运行了
# 配置服务地址
> export NAMESRV_ADDR=127.0.0.1:9876
# 进入 rocketmq 目录
> cd /usr/local/rocketmq-4.7.1
# 发送示例模板
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
# 接收示例消息
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
队列消息消费到成功
7. 关闭 RocketMQ
# 进入 rocketmq 目录
> cd /usr/local/rocketmq-4.7.1
# 停止 broker
> sh bin/mqshutdown broker
# 停止 nameserver
> sh bin/mqshutdown namesrv
自启动 RocketMQ
// TODO
参考文档: