• 安装RocketMq流程及踩坑


    1. 软件准备

    首先Rocketmq版本4.5.1

    2. 环境要求

    • JDK >= 8, 这里使用的是11.0.12
    • Linux64为操作系统,这里使用的是CentOS8
    • 4G+的存储空间

    3. 下载压缩包

    两种方式,

    • 一种是去官网下载zip包,然后进行解压缩,zip包分为两种,一种是源码包,一种是编译后的bin文件包,如果是源码包的话,启动本地环境还需要安装Maven3.2.x
    • 另一种是直接使用命令 wget https://archive.apache.org/dist/rocketmq/4.5.1/rocketmq-all- 4.5.1-bin-release.zip 进行下载即可

    这里我是采用的第一种,去官网下载的bin文件包,然后上传到服务器中,官网的下载地址 点我下载, 在页面中选择对应的版本和下载的zip包格式即可。
    在这里插入图片描述

    4. 解压缩

    对下载好的压缩包进行解压缩,使用命令
    第一个命令直接解压,第二个命令指定解压到的目录,根据需要选择一个即可

    unzip rocketmq-all-4.5.1-bin-release.zip
    unzip rocketmq-all-4.5.1-bin-release.zip -d /rocketmq
    
    • 1
    • 2

    5. 配置环境变量

    该步骤为非必须步骤,如果不需要可以直接跳过,使用命令编辑配置文件

    vim /etc/profile
    
    • 1

    在配置文件中添加, ROCKET_HOME为rocketmq的实际安装位置,请按照实际安装的位置进行更改

    # this is rocketmq env
    export ROCKET_HOME=/java/rocketmq/rocketmq
    export PATH=$PATH:$ROCKET_HOME/bin
    
    • 1
    • 2
    • 3

    保存配置文件,然后使用source /etc/profile 命令刷新配置文件
    最后使用mq命令,如果出现如下界面表示环境变量配置成功:
    在这里插入图片描述

    6. 启动

    1. 使用mqnamesrv进行mq的启动,出现如下界面表示启动成功:
      在这里插入图片描述
    2. 使用mqbroker -n localhost:9876进行broker的启动,出现如下界面表示启动成功:
      在这里插入图片描述

    7. 本地测试

    server和broker都启动完毕之后,如果要进行本地的收发消息测试,还需要修改tools.sh脚本三处地方
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
    export CLASSPATH=.${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}
    #JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext"

    修改完毕之后,使用修改好的tools.sh进行 启动消费者,然后启动生产者,观察消费者是否能收到生产者生产的消息即可。

    1. 启动消费者
    # 1.设置环境变量 
    export NAMESRV_ADDR=localhost:9876 
    # 2.接收消息 
    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    2. 启动生产者

    # 1.设置环境变量 
    export NAMESRV_ADDR=localhost:9876
     # 2.使用安装包的Demo发送消息 
    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    3. 消费成功
    当消费者界面中能够成功收到生产者生产的消息即为消费成功
    在这里插入图片描述
    至此,RocketMq安装完毕。

    8.问题总结

    1. 首先由于rocketmq是使用jdk8进行开发的,所以在使用版本11进行启动的时候会出现下面的错误:
      在这里插入图片描述
      报错的大概意思是关于垃圾回收的一部分参数在jdk9的已经被遗弃
      处理办法:将上述报错的参数都进行删除,打开runserver.sh文件(vim runserver.sh),将如图所示的那行命令中出现报错的参数都进行删除即可
      在这里插入图片描述
    2. 再次启动,会报另一种错误
      在这里插入图片描述
      大概意思是说不支持使用-Djava.ext.dirs的方式,建议使用-classpath
      处理办法: 这里与第一种错误处理方式相同,将当前报错的这行命令注释掉即可
      在这里插入图片描述
    3. 再次启动,仍然会报一个找不到或无法加载主类org.apache.rocketmq.namesrv.NamesrvStartup的错误
      在这里插入图片描述
      处理办法:这里是由于在runserver.sh中导入的CLASSPATH不正确导致的,这里将CLASSPATH修改为: .:${BASE_DIR}/conf:${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib/*
      在这里插入图片描述
    4. 启动broker的时候,会报如下错误,大概意思跟启动mqserver的时候一样,是有一些参数不支持了。
      在这里插入图片描述
      处理方法:编辑runbroker.sh文件
    vim bin/runbroker.sh 
    删除:
    PrintGCDateStamps 
    PrintGCApplicationStoppedTime 
    PrintAdaptiveSizePolicy 
    UseGCLogFileRotation 
    NumberOfGCLogFiles=5 
    GCLogFileSize=30m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    由于jdk9开始,使用模块化开发,所以这里添加对java export的支持,使用如下语句
    $JAVA ${JAVA_OPT} --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED 替换文件最后的$JAVA ${JAVA_OPT}

    9. 附件

    1. 修改后的runserver.sh文件
    #!/bin/sh
    
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    #===========================================================================================
    # Java Environment Setting
    #===========================================================================================
    error_exit ()
    {
        echo "ERROR: $1 !!"
        exit 1
    }
    
    [ ! -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_HOME
    export JAVA="$JAVA_HOME/bin/java"
    export BASE_DIR=$(dirname $0)/..
    export CLASSPATH=.:${BASE_DIR}/conf:${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib/*
    
    #===========================================================================================
    # JVM Configuration
    #===========================================================================================
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=160m"
    JAVA_OPT="${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8"
    JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
    JAVA_OPT="${JAVA_OPT}  -XX:-UseLargePages"
    #JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
    #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
    JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
    JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
    
    $JAVA ${JAVA_OPT} $@
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    1. 修改后的runbroker.sh文件
    #!/bin/sh
    
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    #===========================================================================================
    # Java Environment Setting
    #===========================================================================================
    error_exit ()
    {
        echo "ERROR: $1 !!"
        exit 1
    }
    
    [ ! -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_HOME
    export JAVA="$JAVA_HOME/bin/java"
    export BASE_DIR=$(dirname $0)/..
    export CLASSPATH=.${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}
    
    #===========================================================================================
    # JVM Configuration
    #===========================================================================================
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
    JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
    JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
    JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
    JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
    #JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
    #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
    JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
    JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
    
    numactl --interleave=all pwd > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
            if [ -z "$RMQ_NUMA_NODE" ] ; then
                    numactl --interleave=all $JAVA ${JAVA_OPT} $@
            else
                    numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@
            fi
    else
            $JAVA ${JAVA_OPT} --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED $@
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    1. 修改后的tools.sh文件
    #!/bin/sh
    
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    #===========================================================================================
    # Java Environment Setting
    #===========================================================================================
    error_exit ()
    {
        echo "ERROR: $1 !!"
        exit 1
    }
    
    [ ! -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_HOME
    export JAVA="$JAVA_HOME/bin/java"
    export BASE_DIR=$(dirname $0)/..
    #export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
    export CLASSPATH=.${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}
    
    #===========================================================================================
    # JVM Configuration
    #===========================================================================================
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
    #JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext"
    JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
    
    $JAVA ${JAVA_OPT} $@
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    从零开始配置vim(21)——lsp简介与treesitter 配置
    网络安全(黑客)自学
    页表缓存(TLB)和巨型页的实现
    AI时代中小企业算力需求爆发,惠普发布新品战99 Monster满血高算工作站
    临近期末,这些题不来看看吗?(上)
    小程序容器技术加持下,企业自主打造小程序生态
    基于php的创新创业服务中心
    c++ SQLite 特别好用的库使用实例-更新(3)
    华为认证 | HCIA、HCIP、HCIE,难度区别在哪里?
    区块链交易所技术开发架构解析 交易所开发团队
  • 原文地址:https://blog.csdn.net/kaifaxiaoliu/article/details/127417121