携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
报错情况
在使用测试rocketmq时,想删除无用的topic
打开控制台,点击删除topic报错,(jdk11)
查看日志报错堆栈
原因分析
经过查找,报错原因是
在Java9之后引入了模块化的概念,是将类型和资源封装在模块中,并仅导出其他模块要访问其公共类型的软件包。如果模块中的软件包未导出或打开,则表示模块的设计人员无意在模块外部使用这些软件包。
这样的包可能会被修改或甚至从模块中删除,无需任何通知。 如果仍然使用这些软件包通过使用命令行选项导出或打开它们,可能会面临破坏应用程序的风险! 那么对于上面这个异常,我们怎么解决呢?可以通过加入启动参数。
首先,这类异常一般符合下面这个模板:
Unable to make {member} accessible: module {A} does not '{operation} {package}' to {B}
我们根据 operation,决定要加的启动参数:
| operation | jvm 启动参数 |
|---|---|
| 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"
实际操作
重启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进程总是在启动后就退出
经过百度后 删除store目录(todo 为什么删除后重启成功)
进入控制台,点击删除
已经成功删除!