目前 RockerMQ 的最新版本是 4.9.2,这个版本在 Java 11 下是无奈运行的:
[rocketmq@localhost 00-rocketmq-4.9.2]$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)
[rocketmq@localhost 00-rocketmq-4.9.2]$ bin/mqnamesrv
-Djava.ext.dirs=/jre/lib/ext:/home/rocketmq/00-rocketmq-4.9.2/bin/../lib:/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
相干的 issue 在这里,到目前为止依然是 open 状态。
咱们能够看到,之所以运行失败,次要是因为启动脚本中的 JVM 参数问题。
说到这里我想劝各位公布相似开源我的项目的时候,脚本外面不要带上一大堆的
-XX:
调优参数,这些应该交给用户本人去调整,因为你不晓得用户用的是什么 JVM,你不要强行帮用户去“优化”,只有留个口子就行了。
既然是脚本的问题,那么批改下脚本就能够了:
关上 runserver.sh
和 runbroker.sh
(Windows 下则是相应的 .cmd 后缀),做如下批改(批改前记得备份):
- 找到蕴含
-Djava.ext.dirs
参数的行,将该行删除或正文掉; - 找到蕴含
-Xloggc
参数的行,将该行删除或正文掉; - 找到蕴含
-XX:+UseGCLogFileRotation
参数的行,将该行删除或正文掉; - 找到蕴含
export CLASSPATH=
的行(在文件的后面局部),将等号前面的内容改为.:${BASE_DIR}/conf:${BASE_DIR}/lib/*:${CLASSPATH}
- 找到蕴含
-XX:-UseLargePages
参数的行,在它的上面增加一行JAVA_OPT="${JAVA_OPT} --add-exports java.base/jdk.internal.ref=ALL-UNNAMED"
通过这样的批改,RocketMQ 就能够在 Java 11 下胜利启动了。