RocketMQ 本地部署问题总结

3,359 阅读3分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章,点击查看活动详情

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

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、不要使用官方文档的启动命令,使用如下命令代替:

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

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

namesrvAddr = localhost:9876
brokerIP1=localhost
brokerIP2=localhost

重启启动 Broker 即可。

MQBrokerException: CODE: 14

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

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

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

RocketMQ-Dashboard 部署

这个项目还是有点惊喜的,github.com/apache/rock…

部署可以参考:rocketmq.apache.org/docs/%E9%83… ;这个部署比较简单,没有 RocketMQ 那么多套路和问题,部署完成之后,界面大致如下:

最后欢迎掘友订阅我的 # 磊叔的消息小屋 专栏,一起探索主流的消息中间件!!!