Rocketmq 在 linux 上安装
-
- 创建目录,下载 rocketmq
# 创建安装目录,系统软件我们装在 /opt 目录下
mkdir -p /opt/rocketmq
cd /opt/rocketmq
# 下载(请访问官网获取最新版本链接)
wget https://archive.apache.org/dist/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip
# 解压
unzip rocketmq-all-5.0.0-bin-release.zip
cd rocketmq-all-5.0.0-bin-release
-
- 修改配置
# 修改 NameServer JVM 配置
vim bin/runserver.sh
# 找到这一行(大约在第62行):
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 修改为(如果内存较小,如2GB服务器):
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 修改 Broker JVM 配置
vim bin/runbroker.sh
# 找到这一行(大约在第62行):
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# 修改为(如果内存较小):
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g"
-
- 修改 Broker 配置文件
# 复制配置文件
cp conf/broker.conf.sample conf/broker.conf
# 编辑配置文件
vim conf/broker.conf
添加以下配置:
# NameServer 地址
namesrvAddr=localhost:9876
# Broker 名称
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
# 存储路径
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
# 自动创建主题(开发环境可用)
autoCreateTopicEnable=true
# Broker IP(如果有多网卡需要指定)这里如果需要使用外网访问,要写外网 ip,同时需要开通端口防火墙
brokerIP1=你的服务器IP
-
- 启动 NameServer
# 使用后台启动 这里 /dev/null 表示丢弃日志
nohup sh ./bin/mqnamesrv > /dev/null 2>&1 &
# 保留日志在当前目录 nohup.out 文件中
nohup sh ./mqnamesrv &
# 查看日志
cat ./nohup.out
-
- 启动 broker
nohup sh ./mqbroker -c ../conf/broker.conf > ./broker.log 2>&1 &
-
- 检验是否启动
# java 方法
jps -l | grep mq
# ps
ps -ef | grep mq
-
- 发送测试消息
# 设置环境变量
export NAMESRV_ADDR=localhost:9876
# 发送消息 默认是 TestTopic
sh ./tools.sh org.apache.rocketmq.example.quickstart.Producer
# 消费消息
sh ./tools.sh org.apache.rocketmq.example.quickstart.Consumer
如果成功,应该就部署完成了
-
- 使用管理命令
# 查看集群状态
sh ./mqadmin clusterList -n localhost:9876
# 查看主题列表
sh ./mqadmin topicList -n localhost:9876
# 查看特定 Topic 状态
sh ./mqadmin topicStatus -n localhost:9876 -t TopicTest
# 查看 Topic 路由信息
sh ./mqadmin topicRoute -n localhost:9876 -t TopicTest
# 创建 topic
sh ./mqadmin updateTopic -n 127.0.0.1:9876 -c DefaultCluster -t MyTestTopic -p 4
# 向 topic 发送消息
./mqadmin sendMessage -n localhost:9876 -t TopicTest -b localhost:10911 -p "test message"
创建 topic 参数:
# 完整参数创建
sh bin/mqadmin updateTopic \
-n localhost:9876 \ # NameServer 地址
-b localhost:10911 \ # Broker 地址(可选)
-c DefaultCluster \ # 集群名称
-t OrderTopic \ # Topic 名称
-r 8 \ # 读队列数
-w 8 \ # 写队列数
-p 6 \ # 权限:6=读写,4=只读,2=只写
-o false \ # 是否顺序消息
-s false \ # 是否系统 Topic
-u false # 单元化
#!/bin/bash
# RocketMQ 重启脚本
# 配置参数
ROCKETMQ_HOME="/opt/rocketmq/rocketmq-all-5.0.0-bin-release"
BROKER_CONF="/opt/rocketmq/rocketmq-all-5.0.0-bin-release/conf/broker.conf"
LOG_DIR="/opt/rocketmq/logs"
# 创建日志目录
mkdir -p $LOG_DIR
# 设置日志文件
NAME_SRV_LOG="$LOG_DIR/mqnamesrv.log"
BROKER_LOG="$LOG_DIR/broker.log"
RESTART_LOG="$LOG_DIR/restart.log"
# 函数:打印日志
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $RESTART_LOG
}
# 函数:检查进程是否存在
check_process() {
local process_name=$1
pgrep -f "$process_name" > /dev/null 2>&1
return $?
}
# 函数:停止进程
stop_process() {
local process_type=$1
local process_name=$2
local stop_script=$3
log_message "正在停止 $process_type..."
if check_process "$process_name"; then
cd $ROCKETMQ_HOME/bin && sh $stop_script
local retry_count=0
# 等待进程停止,最多等待30秒
while check_process "$process_name" && [ $retry_count -lt 30 ]; do
sleep 1
((retry_count++))
done
if check_process "$process_name"; then
log_message "警告: $process_type 正常停止失败,尝试强制停止..."
pkill -9 -f "$process_name"
sleep 2
if check_process "$process_name"; then
log_message "错误: $process_type 强制停止失败"
return 1
fi
fi
log_message "$process_type 已停止"
else
log_message "$process_type 未运行"
fi
return 0
}
# 主逻辑
log_message "开始重启 RocketMQ..."
# 1. 停止 Broker
stop_process "Broker" "BrokerStartup" "mqshutdown broker"
# 2. 停止 NameServer
stop_process "NameServer" "NamesrvStartup" "mqshutdown namesrv"
echo "关闭 RocketMQ broker, namesrv 完成"
log_message "所有服务已停止,等待3秒..."
sleep 3
# 3. 启动 NameServer
log_message "启动 NameServer..."
cd $ROCKETMQ_HOME/bin
nohup sh mqnamesrv > $NAME_SRV_LOG 2>&1 &
# 等待 NameServer 启动
log_message "等待 NameServer 启动..."
sleep_count=0
while ! check_process "NamesrvStartup" && [ $sleep_count -lt 30 ]; do
sleep 1
((sleep_count++))
done
if check_process "NamesrvStartup"; then
log_message "NameServer 启动成功"
else
log_message "错误: NameServer 启动失败,请检查日志: $NAME_SRV_LOG"
exit 1
fi
# 4. 启动 Broker
log_message "启动 Broker..."
cd $ROCKETMQ_HOME/bin
nohup sh mqbroker -c $BROKER_CONF > $BROKER_LOG 2>&1 &
# 等待 Broker 启动
log_message "等待 Broker 启动..."
sleep_count=0
while ! check_process "BrokerStartup" && [ $sleep_count -lt 60 ]; do
sleep 1
((sleep_count++))
done
if check_process "BrokerStartup"; then
log_message "Broker 启动成功"
else
log_message "错误: Broker 启动失败,请检查日志: $BROKER_LOG"
exit 1
fi
# 5. 最终检查
log_message "最终状态检查..."
echo "=========================================="
echo "RocketMQ 重启完成!"
echo "=========================================="
echo "NameServer 日志: $NAME_SRV_LOG"
echo "Broker 日志: $BROKER_LOG"
echo "重启过程日志: $RESTART_LOG"
echo "=========================================="
# 显示进程状态
if check_process "NamesrvStartup"; then
echo "✓ NameServer 正在运行"
else
echo "✗ NameServer 未运行"
fi
if check_process "BrokerStartup"; then
echo "✓ Broker 正在运行"
else
echo "✗ Broker 未运行"
fi
echo "=========================================="

浙公网安备 33010602011771号