RocketMQ 本地部署问题总结

本篇分为 RocketMQ 部署和 RocketMQ-dashboard 部署两部分,主要是 RocketMQ 部署问题较多,汇总了下网上各路大神以及官方 issue 的讨论汇总而来。

RocketMQ 部署

根据官方的快速开始 尝试在本地部署 RocketMQ;如果你是按照官方文档直接来搞,可能 90% 是不可能成功的。

我自己本地部署时遇到了绝大多数网上都遇到的问题(从 4.2.0 到 4.9.3 版本均无法直接启动),比如:

  • No route info of this topic
  • connect to [127.0.0.1:9876] failed
  • org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14

No route info of this topic

这里在官方 issue 上有讨论,而且很激烈 :https://github.com/apache/rocketmq/issues/504;RocketMQ 作为 Apache 顶级项目,在 issue 中还会对 qiuck starter 有如此激烈的讨论和吐槽,是否也应该有一些反思?即使是有问题出现,也应该将详细的信息吐出来,不管是没有连接到 NameServer 还是 缺少 Topic,都应该将信息暴露给用户。从我部署来看,出现 No route info of this topic时,先通过手动创建了 Topic,没有解决。尝试看了下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private SendResult sendDefaultImpl(
Message msg,
final CommunicationMode communicationMode,
final SendCallback sendCallback,
final long timeout
) throws MQClientException, RemotingException, MQBrokerException, InterruptedException {
// 省略...
// 这里取到的 topicPublishInfo 里面的 messageQueue 为 空,导致 topicPublishInfo.ok 为 false
TopicPublishInfo topicPublishInfo = this.tryToFindTopicPublishInfo(msg.getTopic());
if (topicPublishInfo != null && topicPublishInfo.ok()) {
boolean callTimeout = false;
// 省略...
}
// 省略...
throw new MQClientException("No route info of this topic: " + msg.getTopic() + FAQUrl.suggestTodo(FAQUrl.NO_TOPIC_ROUTE_INFO),
null).setResponseCode(ClientErrorCode.NOT_FOUND_TOPIC_EXCEPTION);
}

从 debug 分析来看,topicPublishInfo 里面的 messageQueue 是空的;NameServer 和 Broker 进程也都是正常的,原因在于配置存在问题,导致 NameServer 和 Broker 没有建立正常的连接关系,从而导致 NameServer 感知不到 Broker,所以拉不到信息。

因为是本地部署,并且部署 rocketmq-dashboard 确可以正常连接到集群,都可以看到 Topic 信息;所以基本排除了防火墙、内外网不通等问题干;网上有很多类似的解题思路,各位仁兄在参考时一定要结合自己的实际情况来看,不要一股脑扎进去配置。

connect to [127.0.0.1:9876] failed

这个问题也是有些莫名奇妙的,NameServer 是正常启动的,通过 telnet localhost 9876 端口也是正常的,但是官方 demo 启动时报了这个错。从网上摸索了下,得到的解决方案是:

1、不要使用官方文档的启动命令,使用如下命令代替:

1
sh bin/mqbroker -n localhost:9876 -c conf/broker.conf

2、broker.conf 配置文件中增加了如下配置

1
2
3
namesrvAddr = localhost:9876
brokerIP1=localhost
brokerIP2=localhost

重启启动 Broker 即可。

MQBrokerException: CODE: 14

这个异常信息给的比较靠谱:

1
Caused by CODE: 14 DESC: service not available now, maybe disk full

通过异常可以非常明确的 get 到原因,就是磁盘空间不够了。我本地 mac 磁盘空间从剩余 10G ,清理到剩余 50G 之后,重新启动客户端 OK 了。

RocketMQ-Dashboard 部署

这个项目还是有点惊喜的,https://github.com/apache/rocketmq-dashboard/

部署可以参考:https://rocketmq.apache.org/docs/%E9%83%A8%E7%BD%B2%E4%B8%8E%E8%BF%90%E7%BB%B4/17Dashboard ;这个部署比较简单,没有 RocketMQ 那么多套路和问题,部署完成之后,界面大致如下:

如果图片链接无法展示,可以查阅原文:https://juejin.cn/post/7143906476229132318

作者

卫恒

发布于

2022-09-22

更新于

2022-09-22

许可协议

评论