直接运行官方 RocketMQ Dashboard 报 Connection refused 是因未正确配置 namesrvAddr 或 NameServer 不可达;需通过 -Drocketmq.config.namesrvAddr 显式指定可访问的 NameServer 地址,并确保网络连通、ACL 权限及 Broker 统计功能启用。

为什么直接运行官方 dashboard 会报 Connection refused
RocketMQ Dashboard 本身不包含 Broker,它只是个纯前端+后端 API 的监控界面,所有数据都依赖调用 rocketmq-console-ng(即官方维护的 dashboard 项目)暴露的 HTTP 接口,而这些接口又必须能连上你本地或远程的 NameServer。常见错误是:启动了 dashboard,但没配 rocketmq.config.namesrvAddr,或者 Nameserver 没开、防火墙拦了、地址写错(比如用了 localhost 却在 Docker 里跑 dashboard)。结果就是页面空白,浏览器控制台看到 500 Internal Server Error 或后端日志里反复打印 org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <xxx> failed。
如何正确配置 rocketmq.config.namesrvAddr 启动 jar 包
下载编译好的 rocketmq-console-ng jar(如 rocketmq-console-ng-2.1.0.jar),不要用源码直接 mvn spring-boot:run —— 容易漏 profile。启动时必须显式传入 Nameserver 地址:
java -Drocketmq.config.namesrvAddr=192.168.1.100:9876 \
-Drocketmq.config.dataPath=/opt/rocketmq-dashboard/data \
-jar rocketmq-console-ng-2.1.0.jar
注意几个关键点:
-
namesrvAddr必须是 Broker 实际可被访问的 IP+端口,不能写localhost或127.0.0.1(除非 dashboard 和 Nameserver 真的在同一台且未隔离) - 如果 Nameserver 启用了 ACL,需额外加
-Drocketmq.config.enableAcl=true并确保 classpath 下有tools.yml -
dataPath指定后,历史消息查询、用户偏好等才会持久化,否则每次重启丢失 - 端口默认是
8080,冲突时加--server.port=8081
Docker 部署时网络模式选 host 还是自定义 bridge?
绝大多数失败案例出在 Docker 网络。用 bridge 模式时,容器内 localhost 指向的是容器自己,不是宿主机;而你 Nameserver 很可能跑在宿主机上。此时必须:
- 把 Nameserver 地址设为宿主机真实 IP(非
host.docker.internal,该域名在 Linux Docker Desktop 不默认支持) - 或改用
--network host,让容器直接共享宿主机网络栈(简单粗暴,适合测试) - 或建自定义 bridge 网络 +
--add-host显式映射宿主机 IP(生产推荐)
例如:
docker run -d --name rmq-dashboard \ --network host \ -e "rocketmq.config.namesrvAddr=192.168.1.100:9876" \ -p 8080:8080 \ apacherocketmq/rocketmq-console-ng:2.1.0
页面显示 Topic 列表为空或 Group 消费进度不更新
这通常不是 dashboard 的问题,而是权限或 Broker 配置导致数据拉不到。检查三项:
- Broker 是否开启了统计功能:
broker.conf中确认有enableTopicMetrics=true(4.9.0+ 默认开启,老版本需手动加) - Nameserver 是否允许查询:
namesrvAddr能连通 ≠ 所有 Topic 数据都可读;ACL 开启时,dashboard 使用的账号需有PermName: VIEW权限 - 消费组是否真的在拉消息:如果某 Group 已下线或从未启动过,dashboard 就查不到 offset,显示“-”或 0,这不是 bug,是事实同步
临时验证方法:用 ./mqadmin clusterList -n 192.168.1.100:9876 看能否列出集群;再用 ./mqadmin topicList -n 192.168.1.100:9876 确认 Topic 可见。
真正麻烦的是跨网段、K8s Service DNS 解析、TLS 加密 Nameserver 这些场景 —— dashboard 当前不支持 TLS 名称服务发现,也无内置证书信任链配置项,得靠反向代理中转。


















