前言
RocketMQ集群是配置好了,但是在运行某个虚拟机上bin目录下的mqadmin命令时,某台虚拟机出现了如标题所示的错误。针对这个问题,写这篇文章记录下,以帮助到遇到这个问题的小伙伴儿们。
错误分析
报的错误为下面这个,报错全部代码:
xml
[root@localhost bin]# mqadmin topicList
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
org.apache.rocketmq.tools.command.SubCommandException: TopicListSubCommand command failed
at org.apache.rocketmq.tools.command.topic.TopicListSubCommand.execute(TopicListSubCommand.java:113)
at org.apache.rocketmq.tools.command.MQAdminStartup.main0(MQAdminStartup.java:139)
at org.apache.rocketmq.tools.command.MQAdminStartup.main(MQAdminStartup.java:90)
Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed
at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:394)
at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicListFromNameServer(MQClientAPIImpl.java:1390)
at org.apache.rocketmq.tools.admin.DefaultMQAdminExtImpl.fetchAllTopicList(DefaultMQAdminExtImpl.java:253)
at org.apache.rocketmq.tools.admin.DefaultMQAdminExt.fetchAllTopicList(DefaultMQAdminExt.java:218)
at org.apache.rocketmq.tools.command.topic.TopicListSubCommand.execute(TopicListSubCommand.java:107)
... 2 more
估计看了这个错误都会明白什么意思,RocketMQ远程连接错误,链接为空问题导致的失败。但是集群已经配置好了,这个时候运行这个IP下的mqadmin clusterList
命令,也无法列出所在的所有集群。
这个时候我尝试了一下看看虚拟机的IP能否ping得通,发现确实也没问题:
难道是因为防火墙?我在每个虚拟坤下都执行了systemctl status firewalld
命令,发现每个虚拟坤下的防火墙也都是关闭状态,那就一定不是这个方面的原因了。
问题解决
后来查阅了很多资料,以及自己做了很多尝试才发现,这个错误 org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed
表示 Apache RocketMQ 客户端在尝试连接到某个服务(比如 NameServer)时,目标地址是 null,因此无法建立连接。那么是什么原因导致的呢?
xml
配置问题:客户端的 NameServer 地址可能没有正确配置。
如果你和我一样是在代码中配置,可能是代码中的配置逻辑有误,导致没有正确设置 NameServer 地址。 如果你是在配置文件(比如 broker.conf 或者客户端的配置文件)中设置,可能是文件被错误地修改或者未正确加载。
这个时候已经检查了好多次配置文件,发现配置文件没问题,难道是?
忘记了还有个系统文件,我查看136虚拟机下的配置文件vim /etc/profile
发现确实其他的虚拟机都配置了nameserver的地址,唯有这个虚拟坤的没有配置,于是我给他填上了: 配置完成后一定不要忘记执行source /etc/profile
命令使得配置生效哦!!!
如果这个方法解决不了你的难题,你也可以查看 RocketMQ 客户端和 NameServer 的日志文件,可能会有更详细的错误信息或警告,这有助于你解决bug。
本篇文章到这里就结束了,后续会继续分享RocketMQ相关的知识,感谢各位小伙伴们的支持!