Skip to content

Linux安装rocketMQ

一、前置环境

  • JDK 1.8 64 位

  • Maven 3.2.x 及以上版本

  • Git

  • 4G 以上可用内存

环境变量示例如下:

export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_144
export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

二、安装rocketMQ

  • 源码安装:将源码上传到 RocketMQ 目录后执行以下命令

    mvn -Prelease-all -DskipTests clean install -U
  • 二进制安装:直接下载发行包并解压

    wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zip
    #解压
    unzip rocketmq-all-4.4.0-bin-release.zip

三、启动rocketMQ

  1. 修改启动内存配置,编辑 bin 目录下的 runserver.shrunbroker.sh

    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
  2. 进入 bin 目录启动 NameServer:nohup sh mqnamesrv &

    如果不需要打印日志,可以使用:nohup sh mqnamesrv >/dev/null 2>&1 &

  3. 启动 Broker:

nohup sh mqbroker -n 127.0.0.1:9876 &

如果不需要打印日志:

nohup sh mqbroker -n 127.0.0.1:9876 >/dev/null 2>&1 &

如果机器存在多网卡,需要额外指定 brokerIP1。可以新增 /etc/broker.conf,并在配置文件中增加 brokerIP1=公网IP,然后使用以下命令启动:

nohup sh mqbroker -n 127.0.0.1:9876 -c /etc/broker.conf &

四、关闭rocketMQ

  • 关闭 NameServer:sh mqshutdown namesrv
  • 关闭 Broker:sh mqshutdown broker

五、验证消息

# 增加环境变量
export ROCKETMQ_HOME=/usr/local/rocketMQ/rocketmq-all-4.4.0-bin-release
export NAMESRV_ADDR=localhost:9876
cd  /usr/local/rocketMQ/rocketmq-all-4.4.0-bin-release
# 发送消息
sh bin/tools.sh  org.apache.rocketmq.example.quickstart.Producer
# 接收消息
sh bin/tools.sh  org.apache.rocketmq.example.quickstart.Consumer

六、查看日志

如果启用了日志输出,日志通常会写入 nohup.out,可以通过 tail -f nohup.out 实时查看。

七、设置开机自启

创建启动脚本:

vi /etc/init.d/rocketmq

脚本内容如下,具体路径请按实际环境调整:

#!/bin/sh
#
# rocketmq - this script starts and stops the rocketmq daemon
#
# chkconfig: 2345 99 01
#这里需要引入环境变量
source /etc/profile
ROCKETMQ_HOME=/usr/local/rocketMQ/rocketmq-all-4.4.0-bin-release
ROCKETMQ_BIN=${ROCKETMQ_HOME}/bin
ADDR=127.0.0.1:9876
LOG_DIR=${ROCKETMQ_HOME}/logs
NAMESERVER_LOG=${LOG_DIR}/namesrv.log
BROKER_LOG=${LOG_DIR}/broker.log
ROCKETMQ_CONSOL=/usr/local/rocketMQ/view

usage(){
    echo "********************************************************"
    echo "usage: sh server.sh [start|stop|restart]"
    echo " *1, start * "
    echo " *2, stop * "
    echo " *3, restart * "
    echo "********************************************************"
    read -p "please input option:" option
    case "$option" in
    "1")
    start;;
    "2")
    stop;;
    "3")
    restart;;
    *)
    usage;;
  esac

}

if_exist(){
    pid=`ps -ef | grep rocketmq-console-ng-1.0.1.jar | grep -v grep | awk '{print $2}' `
    if [[ -z ${pid} ]]; then
        return 1
    else
        return 0
    fi
}

start() {
if [ ! -d ${LOG_DIR} ]; then
mkdir ${LOG_DIR}
fi
cd ${ROCKETMQ_BIN}
nohup sh mqnamesrv >${NAMESERVER_LOG} 2>&1 &
echo  "The Name Server boot success..."
nohup sh mqbroker -n ${ADDR} autoCreateTopicEnable=true >${BROKER_LOG} 2>&1 &
echo  "The broker[%s, ${ADDR}] boot success..."
cd ${ROCKETMQ_CONSOL}
nohup java -jar rocketmq-console-ng-1.0.1.jar >/dev/null &
sleep 5
echo "The rocketmq-console-ng-1.0.1.jar in running "
}

stop() {
cd ${ROCKETMQ_BIN}
sh mqshutdown broker
sleep 1
sh mqshutdown namesrv
if_exist
if [[ $? -eq "0" ]]; then
    for (( i = 0; i < 10; i++ )); do
        if_exist
        if [[ $? -eq "0" ]]; then
            kill -9 $pid
            echo "rocketmq-console-ng-1.0.1.jar is stop"
        else
            break
        fi
    done
else
    echo "rocketmq-console-ng-1.0.1.jar is not running"
fi
}

restart() {
stop
sleep 2
start
}

case "$1" in
"start")
start
;;
"stop")
stop
;;
"restart")
restart
;;
*)
usage;;
esac

授权:

chmod a+x /etc/init.d/rocketmq
chkconfig --add rocketmq
#查看是否出现rocketmq,出现则代表加入成功了,只是添加服务
chkconfig --list
#设置开机自启
chkconfig rocketmq on
#查看是否设置成功
chkconfig --list
启动:service rocketmq start
关闭:service rocketmq stop
重启:service rocketmq restart
jps 查看是否有进程

八、rocketMQ生产者常见配置

生产者常见核心配置,broker.conf

  • compressMsgBodyOverHowmuch :消息超过默认字节4096后进行压缩

  • retryTimesWhenSendFailed : 失败重发次数

  • maxMessageSize : 最大消息配置,默认128k

  • topicQueueNums : 主题下面的队列数量,默认是4

  • autoCreateTopicEnable : 是否自动创建主题Topic, 开发建议为true,生产要为false

  • defaultTopicQueueNums : 自动创建服务器不存在的topic,默认创建的队列数

  • autoCreateSubscriptionGroup: 是否允许 Broker 自动创建订阅组,建议线下开发开启,线上关闭

  • brokerClusterName : 集群名称

  • brokerId : 0表示Master主节点 大于0表示从节点

  • brokerIP1 : Broker服务地址

  • brokerRole : broker角色 ASYNC_MASTER/ SYNC_MASTER/ SLAVE

  • deleteWhen : 每天执行删除过期文件的时间,默认每天凌晨4点

  • flushDiskType :刷盘策略, 默认为 ASYNC_FLUSH(异步刷盘), 另外是SYNC_FLUSH(同步刷盘)

  • listenPort : Broker监听的端口号

  • mapedFileSizeCommitLog : 单个conmmitlog文件大小,默认是1GB

  • mapedFileSizeConsumeQueue:ConsumeQueue每个文件默认存30W条,可以根据项目调整

  • storePathRootDir : 存储消息以及一些配置信息的根目录 默认为用户的 ${HOME}/store

  • storePathCommitLog:commitlog存储目录默认为${storePathRootDir}/commitlog

  • storePathIndex: 消息索引存储路径

  • syncFlushTimeout : 同步刷盘超时时间

  • diskMaxUsedSpaceRatio : 检测可用的磁盘空间大小,超过后会写入报错

九、安装可视化控制台

先修改配置文件可以直接编译运行。修改编译后的文件再运行,不修改项目文件。

  1. git地址https://github.com/apache/rocketmq-externals,下载地址https://github.com/apache/rocketmq-externals.git,去git上查看,如果安装了git,通过git命令克隆下来。

git clone 地址或者通过git可视化工具拉取下来。

  1. 默认端口号为8080,为了保证不让端口冲突,需要先修改默认端口号,在项目rocketmq-console子项目下的src/main/resources/application.properties路径下,修改rocketmq.config.namesrvAddr=192.168.0.101:9876

  2. 进入到控制台项目rocketmq-console,编译打包 mvn clean package -Dmaven.test.skip=true

  3. cmd进入到target目录,通过java -jar的方式运行生成的jar包

  4. 如果是linux服务器,把包放到指定视图路径,修改脚本文件指定路径。