RocketMQ安装过程问题记录
安装环境为MacOS 12.7.5
在启动NameServer时报错,
RROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! !!
解决方法:配置JAVA_HOME,需要配置1.8的JDK,高于这个版本将报另一个错误
macos rocketmq Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
在启动Broker时报错
1
2
3Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.解决方法:这个错误表示在启动 RocketMQ 的时候,JVM 尝试使用
UseG1GC
这个垃圾收集器选项,但它被标记为实验性的,因此需要显式地解锁实验性选项才能使用。可以通过以下步骤来解决这个问题:
找到 RocketMQ 的启动脚本,这通常在
bin
目录下,例如runbroker.sh
(Linux/macOS)或者runbroker.cmd
(Windows)。编辑这个启动脚本,找到 JVM 参数的部分。你可能会看到类似
JAVA_OPT
的变量,用来配置 JVM 启动参数。在
JAVA_OPT
变量中添加-XX:+UnlockExperimentalVMOptions
,比如:1
JAVA_OPT="${JAVA_OPT} -XX:+UnlockExperimentalVMOptions"
保存并关闭文件,然后重新启动 RocketMQ。
如果不确定如何修改,下面是一个示例,如果在
runbroker.sh
中看到以下内容:1
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:+UseG1GC"
可以修改为:
1
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC"
这样,启动时就不会再报这个错误了。
启动消费者或生成者时报错
其中有一条报错信息为
1
Caused by: io.netty.handler.codec.EncoderException: java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;
__问题原因:__这个报错的原因是因为,在我一开始安装RocketMQ时,使用的方式是自行用mvn对源码进行编译的方式,因为当时编译时使用的JDK版本为17,但是后面运行时使用为JDK1.8,倒是ByteBuffer.flip()的实现方式不同造成了这个错误。
__解决方法:__在编译RocketMQ时使用JDK1.8