©著作权归作者所有:来自51CTO博客作者中间件兴趣的原创作品,如需转载,请注明出处,否则将追究法律责任
https://blog.51cto.com/u_15023237/2558428
做积极的人,越努力越幸运!
本文将结合自己使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题、解决问题。

1、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}/bin sh ./mqadmin topicRoute -n 127.0.0.1:9876 -t dw_test_0003
其输出结果如下所示:
如果通过命令无法查询到路由信息,则查看Broker是否开启了自动创建topic,参数为:autoCreateTopicEnable,该参数默认为true。但在生产环境不建议开启。
如果开启了自动创建路由信息,但还是抛出这个错误,这个时候请检查客户端(Producer)连接的Nameserver地址是否与Broker中配置的nameserver地址是否一致。
经过上面的步骤,基本就能解决该错误。

2、消息发送超时

消息发送超时,通常客户端的日志如下:
客户端报消息发送超时,通常第一怀疑的对象是RocketMQ服务器,是不是Broker性能出现了抖动,无法抗住当前的量。
那我们如何来排查RocketMQ当前是否有性能瓶颈呢?
首先我们执行如下命令查看RocketMQ 消息写入的耗时分布情况:
cd /${USER.HOME}/logs/rocketmqlogs/ grep -n 'PAGECACHERT' store.log | more
输出结果如下所示:
RocketMQ会每一分钟打印前一分钟内消息发送的耗时情况分布,我们从这里就能窥探RocketMQ消息写入是否存在明细的性能瓶颈,其区间如下:
[