暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux下JDK11和RocketMQ使用

曱甴崽 2019-09-04
911
没用过Linux,真不敢称其为大师,不知top、scp、ifconfig,心里确实有点慌,为了引入Linux,我们先玩点实用的,从RocketMQ使用开始!
准备RHEL7.6/VMware

难度:新手--战士--老兵--大师

目标:JDK11下安装并调试RocketMQ4.5.2

步骤
1,虚拟机、RHEL下载安装、网络配置、YUM,略。

2,开启虚拟机与window共享,设置:
RHEL运行后,root下执行,我这里都是用root用户执行,没有使用sudo来操作,为啥?目的就是实验功能,避开因各种linux权限问题导致的异常。也强烈建议使用root操作,Linux的权限可以另外单独去研究。
开启共享文件夹功能命令:
#mkdir -p /mnt/hgfs
#vmhgfs-fuse .host:/ /mnt/hgfs
挂载共享文件夹到/mnt/hgfs命令:

设置每次重启之后想让系统自动挂载 命令:
#vim /etc/fstab
运行后最后一行添加:


3,进入共享目录:

#ls /mnt/hgfs/00sharetoVM/
以下为共享文件夹内容示例,这里我已经下载好JDK/RocketMQ/maven,版本见文件名:


4,/usr文件夹下放置这些文件,使用cp命令移动到这些对应的文件夹下,使并用tar命令解压gz文件,unzip命令解压zip文件,


5,确认下jdk和maven的目录:


6,配置maven环境变量,简单理解即linux环境变量,设置命令:

#vim /etc/profile
设置示例如下,其实rocketmq_home目前还没生成,提前设置好而已:

注意退出vim后执行,使配置生效命令:
#source /etc/profile
验证下JDK安装是否成功(注意如果linux自带了JDK,请注意先删除,方法参考第17点):

验证下maven安装是否成功


7.进入rocket源码目录,使用maven编译rocket:


8.等待直到编译成功提示:

[INFO] BUILD SUCCESS

[INFO] ---------------------------------------------------

[INFO] Total time: 52.856 s


9.这里因JDK11兼容问题,修改启动脚本,进入编译后的rocket目录:
[root@localhost bin]# pwd

/usr/rocketmq/rocketmq-all-4.5.2-source-release/distribution/target/rocketmq-4.5.2/rocketmq-4.5.2/bin


10,修改runserver.sh/脚本命令:
#vim runserver.sh
r_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}/lib/rocketmq-namesrv-4.5.2.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}
#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
#echo "BASE_DIR:$BASE_DIR"
#echo "CLASSPATH:$CLASSPATH"


#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xlog:gc:/dev/shm/rmq_srv_gc.log"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
#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} $@


注意:以上内容去掉了#开头的注释内容!

11,修改runbroker.sh脚本命令:
#vim runbroker.sh
r_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}/lib/rocketmq-broker-4.5.2.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}


#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xlog:gc:/dev/shm/mq_gc_%p.log"
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} ${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} $@
fi
~
注意:以上内容去掉了#开头的注释内容!

12,NameServer启动命令,如果不在脚本当前目录,需加上.sh文件所在路径:
#sh mqnamesrv
成功示例如下: 


13,Broker启动,这里直接指定了broker的地址信息,并开启了自动主题功能:

成功示例如下:

14,window中下载rocketmq-console项目,即前端管理界面,下载地址:https://github.com/apache/rocketmq-externals
idea打开后修改pom文件(JDK11),JDK1.8无需修改:

修改properties文件,因为我是要放到linux上运行,即是localhost了,如果放window,即设置为虚拟机ip:
server.port=8181

rocketmq.config.namesrvAddr=127.0.0.1:9876

mvn编译打包:
mvn clean package -Dmaven.test.skip=true

15,再将jar放到linux中使用命令java -jar XXX运行,window中打开访问地址,注意url地址中IP是虚机的:


16,注意事项:JDK11和JDK1.8版本环境要区分清楚,
linux要关闭防火墙或打开端口,关闭命令:
#systemctl stop firewalld
可能的错误提示,无法连接到远程地址:

17,删除旧版JDK,先查看下:
#rpm -qa | grep jdk
删除命令,将上面列出的rpm包名都yum remove掉,以下为示例:
#yum -y remove java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

结束收工!

文章转载自曱甴崽,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论