Rocketmq 在 linux 上安装

前置条件:已安装 java

    1. 创建目录,下载 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
    1. 修改配置
# 修改 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"
    1. 修改 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
    1. 启动 NameServer
# 使用后台启动    这里 /dev/null 表示丢弃日志
nohup sh ./bin/mqnamesrv > /dev/null 2>&1 &

# 保留日志在当前目录 nohup.out 文件中
nohup sh ./mqnamesrv &

# 查看日志
cat ./nohup.out
    1. 启动 broker
nohup sh ./mqbroker -c ../conf/broker.conf > ./broker.log 2>&1 &
    1. 检验是否启动
# java 方法
jps -l | grep mq

# ps
ps -ef | grep mq  
    1. 发送测试消息

这里要记得开防火墙

# 设置环境变量
export NAMESRV_ADDR=localhost:9876

# 发送消息 默认是 TestTopic
sh ./tools.sh org.apache.rocketmq.example.quickstart.Producer

# 消费消息
sh ./tools.sh org.apache.rocketmq.example.quickstart.Consumer

如果成功,应该就部署完成了

    1. 使用管理命令
# 查看集群状态
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                     # 单元化

附:linux 上启动脚本:

#!/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 "=========================================="
posted @ 2025-12-29 17:42  primaryC  阅读(9)  评论(0)    收藏  举报