在CentOS 7上安装RocketMQ 4.9.2

在CentOS 7上安装RocketMQ 4.9.2

引言

本文将详细介绍如何在CentOS 7系统上安装并配置Apache RocketMQ 4.9.2版本。我们将涵盖从下载、解压到调整JVM参数、启动服务、测试以及常见问题的解决方法。

下载和解压RocketMQ

首先,登录到你的CentOS服务器,并执行以下命令来准备RocketMQ的安装目录:

bash 复制代码
cd /opt
mkdir rocketmq
cd rocketmq

接着,使用wget命令下载RocketMQ 4.9.2的压缩包:

bash 复制代码
wget http://ftp.cuhk.edu.hk/pub/packages/apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip

下载完成后,解压文件:

bash 复制代码
unzip rocketmq-all-4.9.2-bin-release.zip

调整RocketMQ的JVM大小

默认情况下,RocketMQ的JVM设置可能不适合开发或测试环境。为了适应较低资源的环境,我们需要调整JVM参数。

进入RocketMQ安装目录(例如 /opt/rocketmq/rocketmq-all-4.9.2-bin-release),查找所有包含JVM参数设置的Shell脚本:

bash 复制代码
find . -name '*.sh' | xargs egrep 'Xms'

需要修改以下脚本中的JVM参数:

  • bin/runserver.sh
  • bin/runbroker.sh
  • bin/tools.sh

注意:在进行任何修改之前,请先备份相应的脚本文件。

修改示例

修改前:
bash 复制代码
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改后:
bash 复制代码
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

根据实际情况调整上述值。

启动Name Server

后台启动Name Server:

bash 复制代码
nohup sh bin/mqnamesrv >/dev/null 2>&1 &

Name Server的默认端口为9876,可以通过以下命令查看其配置项:

bash 复制代码
sh bin/mqnamesrv -p

也可以通过指定配置文件的方式启动Name Server:

bash 复制代码
sh bin/mqnamesrv -c namesrv.conf

RocketMQ的日志默认路径为~/logs/rocketmqlogs/。

启动Broker

启动Broker时需要指定要连接的Name Server:

bash 复制代码
nohup sh bin/mqbroker -n localhost:9876 >/dev/null 2>&1 &

测试RocketMQ

使用RocketMQ自带的消息生产者和消费者示例进行测试:

bash 复制代码
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

关闭RocketMQ

关闭Broker:

bash 复制代码
sh bin/mqshutdown broker

关闭Name Server:

bash 复制代码
sh bin/mqshutdown namesrv

配置外网访问

编辑conf/broker.conf文件,在末尾添加以下内容:

properties 复制代码
namesrvAddr = 外网IP:9876 # (多个地址以;分隔)
brokerIP1 = 外网IP
enablePropertyFilter = true

重启Broker:

bash 复制代码
nohup sh bin/mqbroker -n 外网IP:9876 autoCreateTopicEnable=true -c conf/broker.conf >/dev/null 2>&1 &

自动化启停脚本

创建启动脚本m_start.sh:

bash 复制代码
#!/bin/bash
# 启动server
nohup sh bin/mqnamesrv >/dev/null 2>&1 &
# 启动broker
nohup sh bin/mqbroker -n 外网IP:9876 autoCreateTopicEnable=true -c conf/broker.conf >/dev/null 2>&1 &

创建停止脚本m_stop.sh:

bash 复制代码
#!/bin/bash
# 关闭 broker
sh bin/mqshutdown broker
# 关闭 server
sh bin/mqshutdown namesrv

创建测试脚本test.sh:

bash 复制代码
#!/bin/bash
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

安装RocketMQ控制台

克隆rocketmq-externals项目并编译rocketmq-console:

bash 复制代码
git clone https://github.com/apache/rocketmq-externals.git
cd rocketmq-externals/rocketmq-console
mvn clean package -Dmaven.test.skip=true

将生成的target/rocketmq-console-ng*.jar文件放置于RocketMQ安装目录下,并创建一个启动脚本来启动RocketMQ控制台:

bash 复制代码
nohup java -jar rocketmq-console-ng*.jar --server.port=8080 --rocketmq.config.namesrvAddr=localhost:9876 > /dev/null 2>&1 &

常见问题及解决方案

问题1:JAVA_HOME变量未设置

如果遇到错误提示"Please set the JAVA_HOME variable in your environment",即使已经设置了JAVA_HOME,可以尝试以下方法:

  1. 运行which java来确认Java的路径。

  2. 修改bin/runserver.sh, bin/runbroker.sh, 和 bin/tools.sh文件,注释掉校验JAVA_HOME的语句,并明确指定Java路径:

    bash 复制代码
    #[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java  
    #[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java  
    #[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"  
    export JAVA="/usr/bin/java"

通过以上步骤,你应该能够在CentOS 7上成功安装并运行RocketMQ 4.9.2。希望这篇指南对你有所帮助!


放假不迷糊,加班不抓狂!【微信小程序:排期计算器】,智能算日期,告别混乱,效率翻倍!


相关推荐
贵州诚鑫致达科技有限公司3 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
澜山奕秋6 小时前
RHCSA
linux·运维·服务器
Web极客码7 小时前
告别流式截断:我用客户端中间件解决长文本 API 跨国 SSE 断连与数据自愈
linux·agent 图
cnnews7 小时前
Chromebox3安装Ubuntu后内存化与最小化 eMMC 写入优化
linux·运维·ubuntu
flytalei7 小时前
Ubuntu 24.04 单节点 K3s 部署实践:从环境评估到故障排查与验收
linux·运维·ubuntu
Starry-sky(jing)8 小时前
Hermes Agent 部署后怎么升级?v0.21.7 Linux 源代码版实测
linux·人工智能·ai agent·版本升级·hermes agent
水饺编程8 小时前
第2章:Linux 基础,clear 命令
linux·c语言·汇编
GeW9 小时前
新质生产力路线图Linux和数据库自主可控实践指南
linux
yunwei379 小时前
eBPF 教程:BPF 迭代器用于内核数据导出
linux·后端·性能优化
别动我齐刘海9 小时前
实时控制学习2
linux·c++·人工智能·学习·算法