linux(centos8):基於java13安裝rocketmq-4.7.1(解決jdk不兼容的報錯)


一,Rocketmq是什么?

1, RocketMQ是一個隊列模型的消息中間件,具有高性能、高可靠、高實時、分布式特點

相比kafka,rocketmq的實時性更強

2,官方網站:
http://rocketmq.apache.org/

 

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/

說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,下載:

從官網找到下載地址后:
[root@localhost rocketmq]# pwd
/usr/local/source/rocketmq
[root@localhost rocketmq]# wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip

保存到源安裝文件目錄

 

三,解壓:

[root@localhost rocketmq]# unzip rocketmq-all-4.7.1-bin-release.zip

移動到安裝目錄:

[root@localhost rocketmq]# mv rocketmq-all-4.7.1-bin-release /usr/local/soft/

 

四,配置rocketmq

1,配置conf文件:
[root@localhost rocketmq-all-4.7.1-bin-release]# vi conf/broker.conf
添加兩行:
namesrvAddr = 127.0.0.1:9876
autoCreateTopicEnable = true

 

2,修改runserver.sh啟動參數:
[root@localhost rocketmq-all-4.7.1-bin-release]# vi bin/runserver.sh

因為占用內存較多,需要改小,如果內存充足可以不改

原代碼:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改為:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
 
3,修改runbroker.sh啟動參數
[root@localhost rocketmq-all-4.7.1-bin-release]# vi bin/runbroker.sh
原代碼:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g" 
修改為:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

 

五,生成啟動和關閉的腳本:

[root@localhost rocketmq-all-4.7.1-bin-release]# vi start_namesrv.sh
代碼:
nohup sh bin/mqnamesrv &
 
[root@localhost rocketmq-all-4.7.1-bin-release]# vi stop_namesrv.sh
代碼:
sh bin/mqshutdown namesrv

 

[root@localhost rocketmq-all-4.7.1-bin-release]# vi start_broker.sh
代碼:
nohup sh bin/mqbroker -c /usr/local/soft/rocketmq-all-4.7.1-bin-release/conf/broker.conf &

 

[root@localhost rocketmq-all-4.7.1-bin-release]# vi stop_broker.sh
代碼:
sh bin/mqshutdown broker

 

給腳本增加執行權限:
[root@localhost rocketmq-all-4.7.1-bin-release]# chmod +x *.sh

 

六,用java13啟動rocketmq4.7.1時的報錯:

說明:啟動時會出現報錯是因為rocketmq針對的jdk版本較低,有一些啟動項在新版java上已刪除

如果使用低版本的jdk8可以解決,如果不想降低版本則需修改啟動項

1,解決啟動nameserver時報錯:
報錯:
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqnamesrv                                     
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Unrecognized VM option 'UseCMSCompactAtFullCollection'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit. 
 解決:
修改bin/runserver.sh
注釋掉下面一行:
#JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemar
kEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
修改為:
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB
=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 "

 

報錯:
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqnamesrv
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[0.001s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_srv_gc_%p_%t.log instead.
Unrecognized VM option 'UseGCLogFileRotation'
Error: Could not create the Java Virtual Machine.
解決 :
修改bin/runserver.sh
注釋掉下面這一行
#JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"

 

報錯:
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqnamesrv
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[0.001s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_srv_gc_%p_%t.log instead.
-Djava.ext.dirs=/usr/local/soft/jdk-13/jre/lib/ext:/usr/local/soft/rocketmq-all-4.7.1-bin-release/bin/../lib:/usr/local/soft/jdk-13/lib/ext is not supported.  Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解決:
修改bin/runserver.sh
注釋掉下面這一行
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib:${JAVA_HOME}/lib/ext"

 

報錯:

[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqnamesrv
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[0.001s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_srv_gc_%p_%t.log instead.
[0.001s][warning][gc] -XX:+PrintGCDetails is deprecated. Will use -Xlog:gc* instead.
[0.009s][info   ][gc] Using Concurrent Mark Sweep
錯誤: 找不到或無法加載主類 org.apache.rocketmq.namesrv.NamesrvStartup
原因: java.lang.ClassNotFoundException: org.apache.rocketmq.namesrv.NamesrvStartup
解決:
修改bin/runserver.sh
注釋掉這一行
#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
修改為:
export CLASSPATH=${BASE_DIR}/lib/rocketmq-namesrv-4.7.1.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}:${CLASS_PATH}

 

2,啟動broker時的報錯
報錯1
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqbroker -c /usr/local/soft/rocketmq-all-4.7.1-bin-release/conf/broker.conf
[0.001s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_broker_gc_%p_%t.log instead.
Unrecognized VM option 'PrintGCDateStamps'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
報錯2:
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqbroker -c /usr/local/soft/rocketmq-all-4.7.1-bin-release/conf/broker.conf
[0.004s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_broker_gc_%p_%t.log instead.
Unrecognized VM option 'PrintGCApplicationStoppedTime'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
上面兩個報錯的解決:
修改bin/runbroker.sh
把下面一行注釋掉
#JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCAppli
cationStoppedTime -XX:+PrintAdaptiveSizePolicy”
替換為:
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails"

 

報錯:
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqbroker -c /usr/local/soft/rocketmq-all-4.7.1-bin-release/conf/broker.conf
[0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_broker_gc_%p_%t.log instead.
Unrecognized VM option 'UseGCLogFileRotation'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解決:
修改bin/runbroker.sh
注釋掉下面一行:
#JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"

 

報錯:
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqbroker -c /usr/local/soft/rocketmq-all-4.7.1-bin-release/conf/broker.conf
[0.001s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_broker_gc_%p_%t.log instead.
-Djava.ext.dirs=/usr/local/soft/jdk-13/jre/lib/ext:/usr/local/soft/rocketmq-all-4.7.1-bin-release/bin/../lib:/usr/local/soft/jdk-13/lib/ext is not supported.  Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解決:
修改bin/runbroker.sh
注釋掉下面一行
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib:${JAVA_HOME}/lib/ext"

 

報錯:
[root@localhost rocketmq-all-4.7.1-bin-release]# bin/mqbroker -c /usr/local/soft/rocketmq-all-4.7.1-bin-release/conf/broker.conf
[0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/dev/shm/rmq_broker_gc_%p_%t.log instead.
[0.001s][warning][gc] -XX:+PrintGCDetails is deprecated. Will use -Xlog:gc* instead.
[2.073s][info   ][gc] Using G1
[2.124s][info   ][gc] Periodic GC disabled
錯誤: 找不到或無法加載主類 org.apache.rocketmq.broker.BrokerStartup
原因: java.lang.ClassNotFoundException: org.apache.rocketmq.broker.BrokerStartup
解決:
修改bin/runbroker.sh
注釋掉下面一行
#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
替換為:
export CLASSPATH=${BASE_DIR}/lib/rocketmq-broker-4.7.1.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf/:.:${CLASSPATH}:${CLASS_PATH} 

 

七,啟動rocketmq

先啟動namesrv
[root@localhost rocketmq-all-4.7.1-bin-release]# ./start_namesrv.sh
[root@localhost rocketmq-all-4.7.1-bin-release]# nohup: 把輸出追加到 'nohup.out'
再啟動broker
[root@localhost rocketmq-all-4.7.1-bin-release]# ./start_broker.sh
[root@localhost rocketmq-all-4.7.1-bin-release]# nohup: 把輸出追加到 'nohup.out'

 

八,測試安裝效果:

1,通過jps查看進程:
[root@localhost rocketmq-all-4.7.1-bin-release]# /usr/local/soft/jdk-13/bin/jps
66026 BrokerStartup
65610 NamesrvStartup
66573 Jps

 

2,查看rocketmq生成的日志:
[root@localhost rocketmq-all-4.7.1-bin-release]# tail -f ~/logs/rocketmqlogs/broker.log
2020-09-11 15:25:55 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
2020-09-11 15:25:55 INFO brokerOutApi_thread_3 - register broker[0]to name server 127.0.0.1:9876 OK
2020-09-11 15:26:25 INFO brokerOutApi_thread_4 - register broker[0]to name server 127.0.0.1:9876 OK
2020-09-11 15:26:55 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2020-09-11 15:26:55 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
2020-09-11 15:26:55 INFO brokerOutApi_thread_1 - register broker[0]to name server 127.0.0.1:9876 OK
2020-09-11 15:27:25 INFO brokerOutApi_thread_2 - register broker[0]to name server 127.0.0.1:9876 OK
2020-09-11 15:27:55 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2020-09-11 15:27:55 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
2020-09-11 15:27:55 INFO brokerOutApi_thread_3 - register broker[0]to name server 127.0.0.1:9876 OK

 

3,手動用命令創建topic
[root@localhost rocketmq-all-4.7.1-bin-release]# ./bin/mqadmin updateTopic -t laoliutest -b localhost:10911 -n localhost:9876
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.PlatformDependent0$1 (file:/usr/local/soft/rocketmq-all-4.7.1-bin-release/lib/netty-all-4.0.42.Final.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.PlatformDependent0$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
create topic to localhost:10911 success.
TopicConfig [topicName=laoliutest, readQueueNums=8, writeQueueNums=8, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false][root@localhost rocketmq-all-4.7.1-bin-release]#

查看topic列表:

[root@localhost rocketmq-all-4.7.1-bin-release]# ./bin/mqadmin topicList  -n localhost:9876
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.PlatformDependent0$1 (file:/usr/local/soft/rocketmq-all-4.7.1-bin-release/lib/netty-all-4.0.42.Final.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.PlatformDependent0$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
laoliutest
SCHEDULE_TOPIC_XXXX
RMQ_SYS_TRANS_HALF_TOPIC
DefaultCluster_REPLY_TOPIC
BenchmarkTest
OFFSET_MOVED_EVENT
broker-a
TBW102
SELF_TEST_TOPIC
DefaultCluster

可以看到我們已創建的laoliutest這個topic

 

九,查看java的版本:

[root@localhost rocketmq-all-4.7.1-bin-release]# java --version
java 13 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)

 

十,查看linux的版本:

[root@localhost java]$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM