(bug)RocketMq控制台删除topic报错

276 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

报错情况

在使用测试rocketmq时,想删除无用的topic

打开控制台,点击删除topic报错,(jdk11)

image.png

查看日志报错堆栈 image.png

原因分析

经过查找,报错原因是

在Java9之后引入了模块化的概念,是将类型和资源封装在模块中,并仅导出其他模块要访问其公共类型的软件包。如果模块中的软件包未导出或打开,则表示模块的设计人员无意在模块外部使用这些软件包。

这样的包可能会被修改或甚至从模块中删除,无需任何通知。 如果仍然使用这些软件包通过使用命令行选项导出或打开它们,可能会面临破坏应用程序的风险! 那么对于上面这个异常,我们怎么解决呢?可以通过加入启动参数。

首先,这类异常一般符合下面这个模板:

Unable to make {member} accessible: module {A} does not '{operation} {package}' to {B}

我们根据 operation,决定要加的启动参数:

operationjvm 启动参数
exports--add-exports
opens--add-opens
requires--add-reads

然后拼接启动参数:

{上面的jvm启动参数} {A}/{package}={B}

上面的异常需要的参数就是(ALL-UNNAMED 代表所有 jdk 编译出来的匿名类):

给出建议方法是在runbroker.sh中加入一行启动参数

JAVA_OPT="${JAVA_OPT} --add-exports java.base/jdk.internal.ref=ALL-UNNAMED"

实际操作

image.png

重启rocketmq测试

sh mqshutdown broker

sh mqshutdown namesrv

nohup sh /opt/rocketmq5.0.0/bin/mqnamesrv &

nohup sh /opt/rocketmq5.0.0/bin/mqbroker -n localhost:9876 -c /opt/rocketmq5.0.0/conf/broker.conf autoCreateTopicEnable=true &

重启nameServer正常 重启broker进程总是在启动后就退出 image.png

经过百度后 删除store目录(todo 为什么删除后重启成功)

进入控制台,点击删除 image.png

image.png 已经成功删除!