本文将结合本身使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题、解决问题。web
一、No route info of this topic
没法找到路由信息,其完整的错误堆栈信息以下:缓存
而
且不少读者朋友会说Broker端开启了自动建立主题也会出现上述问题。
RocketMQ的路由寻找流程以下图所示:服务器
上面的核心关键点以下:
若是Broker开启了自动建立Topic,在启动的时候会默认建立主题:TBW102,并会随着Broker发送到Nameserver的心跳包汇报给Nameserver,继而从Nameserver查询路由信息时能返回路由信息。微信
消息发送者在消息发送时首先会查本地缓存,若是本地缓存中存在,直接返回路由信息。网络
若是缓存不存在,则向Nameserver查询路由信息,若是Nameserver存在该路由信息,就直接返回。并发
若是Nameserver不存在该topic的路由信息,若是没有开启自动建立主题,则抛出 No route info of this topic。异步
若是开启了自动建立主题,则使用默认主题向Nameserver查询路由信息,并使用默认Topic的路由信息为本身的路由信息,将不会抛出 No route info of this topic。高并发
一般状况下 No route info of this topic 这个错误通常是在刚搭建RocketMQ,刚入门 RocketMQ遇到的比较多,一般的排查思路以下:性能
能够经过rocketmq-console查询路由信息是否存在,或使用以下命令查询路由信息:学习cd ${ROCKETMQ_HOME}/binsh ./mqadmin topicRoute -n 127.0.0.1:9876 -t dw_test_0003
其输出结果以下所示:
若是经过命令没法查询到路由信息,则查看Broker是否开启了自动建立topic,参数为:autoCreateTopicEnable,该参数默认为true。