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

相关推荐
IT_陈寒11 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
fliter12 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
fliter13 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪13 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter13 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶14 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
JensCS猿14 小时前
从 Spring Boot 回看 SSM 框架:手动挡与自动挡的驾驶哲学
后端
爱勇宝14 小时前
干了近 8 年,一夜之间被裁:AI 时代,程序员最该害怕的不是 AI
前端·后端·程序员
科米米14 小时前
嵌入式日志模块
后端
血小溅14 小时前
三大 AI 编码框架深度对比:GSD vs OpenSpec vs Superpowers
人工智能·后端