已解决org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to n

前言

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相关的知识,感谢各位小伙伴们的支持!

相关推荐
爬山算法1 分钟前
Netty(19)Netty的性能优化手段有哪些?
java·后端
Tony Bai1 分钟前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
想用offer打牌15 分钟前
虚拟内存与寻址方式解析(面试版)
java·后端·面试·系统架构
無量19 分钟前
AQS抽象队列同步器原理与应用
后端
9号达人1 小时前
支付成功订单却没了?MyBatis连接池的坑我踩了
java·后端·面试
用户497357337981 小时前
【轻松掌握通信协议】C#的通信过程与协议实操 | 2024全新
后端
草莓熊Lotso1 小时前
C++11 核心精髓:类新功能、lambda与包装器实战
开发语言·c++·人工智能·经验分享·后端·nginx·asp.net
追逐时光者2 小时前
精选 8 个 .NET 开发实用的类库,效率提升利器!
后端·.net
a程序小傲2 小时前
京东Java面试被问:Fork/Join框架的使用场景
java·开发语言·后端·postgresql·面试·职场和发展
想用offer打牌2 小时前
面试官问Redis主从延迟导致脏数据读怎么解决?
redis·后端·面试