“我报名参加金石方案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 那么多套路和问题,布置完成之后,界面大致如下:

RocketMQ 本地部署问题总结

最后欢迎掘友订阅我的 # 磊叔的音讯小屋 专栏,一同探索干流的音讯中间件!!!