Rocket MQ报错No route info of this topic的问题探究
背景
系统订单创建成功之后需要发送订单创建成功的消息,但是今天突然遇到了如下的报错
1 2 3 4 5 6 | org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest See http: //rocketmq.apache.org/docs/faq/ for further details. at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:610) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1223) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1173) at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:214) |
探究
出现上面的错误,主要有三种情况
一:Topic不存在,即没有创建出来次Topic(我们项目均为手动创建),或者Broker模块不支持自动创建topic。
二:Broker模块没有正确连接到Name Server
三:Producer没有正确连接到Name Server
办法
排查1:Broker 禁止自动创建 Topic,且用户没有通过手工方式创建 Topic
可以在 Rocket_HOME/distribution/target/apache-rocketmq 下执行 " sh bin/mqbroker -m " 来查看 broker 的配置参数
如下所示,autoCreateTopicEnable=true 证明是没有问题的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | [root@localhost apache-rocketmq]# sh ./bin/mqbroker -m 2018-08-12 01\:27\:28 INFO main - namesrvAddr= 2018-08-12 01\:27\:28 INFO main - brokerIP1=192.168.58.129 2018-08-12 01\:27\:28 INFO main - brokerName=localhost.localdomain 2018-08-12 01\:27\:28 INFO main - brokerClusterName=DefaultCluster 2018-08-12 01\:27\:28 INFO main - brokerId=0 2018-08-12 01\:27\:28 INFO main - autoCreateTopicEnable= true 2018-08-12 01\:27\:28 INFO main - autoCreateSubscriptionGroup= true 2018-08-12 01\:27\:28 INFO main - rejectTransactionMessage= false 2018-08-12 01\:27\:28 INFO main - fetchNamesrvAddrByAddressServer= false 2018-08-12 01\:27\:28 INFO main - transactionTimeOut=3000 2018-08-12 01\:27\:28 INFO main - transactionCheckMax=5 2018-08-12 01\:27\:28 INFO main - transactionCheckInterval=60000 2018-08-12 01\:27\:28 INFO main - storePathRootDir=/root/store 2018-08-12 01\:27\:28 INFO main - storePathCommitLog=/root/store/commitlog 2018-08-12 01\:27\:28 INFO main - flushIntervalCommitLog=500 2018-08-12 01\:27\:28 INFO main - commitIntervalCommitLog=200 2018-08-12 01\:27\:28 INFO main - flushCommitLogTimed= false 2018-08-12 01\:27\:28 INFO main - deleteWhen=04 2018-08-12 01\:27\:28 INFO main - fileReservedTime=72 2018-08-12 01\:27\:28 INFO main - maxTransferBytesOnMessageInMemory=262144 2018-08-12 01\:27\:28 INFO main - maxTransferCountOnMessageInMemory=32 2018-08-12 01\:27\:28 INFO main - maxTransferBytesOnMessageInDisk=65536 2018-08-12 01\:27\:28 INFO main - maxTransferCountOnMessageInDisk=8 2018-08-12 01\:27\:28 INFO main - accessMessageInMemoryMaxRatio=40 2018-08-12 01\:27\:28 INFO main - messageIndexEnable= true 2018-08-12 01\:27\:28 INFO main - messageIndexSafe= false 2018-08-12 01\:27\:28 INFO main - haMasterAddress= 2018-08-12 01\:27\:28 INFO main - brokerRole=ASYNC_MASTER 2018-08-12 01\:27\:28 INFO main - flushDiskType=ASYNC_FLUSH 2018-08-12 01\:27\:28 INFO main - cleanFileForciblyEnable= true 2018-08-12 01\:27\:28 INFO main - transientStorePoolEnable= false [root@localhost apache-rocketmq]# |
排查2:Broker 没有正确连接到 Name Server
如下所示,启动 broker 的时候,只要看到了 The broker[localhost.localdomain, 192.168.58.129:10911] boot success. serializeType=JSON and name server is localhost:9876 字样就说明是成功的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@localhost apache-rocketmq]# nohup sh bin/mqbroker -n localhost:9876 & [2] 3256 [1] 退出 143 nohup sh bin/mqbroker -n localhost:9876 [root@localhost apache-rocketmq]# nohup: 忽略输入并把输出追加到 "nohup.out" tail -f ~/logs/rocketmqlogs/broker.log 2018-08-11 23:48:26 INFO main - load exist subscription group , SubscriptionGroupConfig [groupName=CID_ONSAPI_OWNER, consumeEnable= true , consumeFromMinEnable= true , consumeBroadcastEnable= true , retryQueueNums=1, retryMaxTimes=16, brokerId= 2018-08-11 23:48:31 WARN main - Load default discard message hook service: DefaultTransactionalMessageCheckListener 2018-08-11 23:48:31 INFO FileWatchService - FileWatchService service started 2018-08-11 23:48:31 INFO PullRequestHoldService - PullRequestHoldService service started 2018-08-11 23:48:31 INFO brokerOutApi_thread_1 - register broker to name server localhost:9876 OK 2018-08-11 23:48:31 INFO main - Start transaction service! 2018-08-11 23:48:31 INFO main - The broker[localhost.localdomain, 192.168.58.129:10911] boot success. serializeType=JSON and name server is localhost:9876 2018-08-11 23:48:41 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes 2018-08-11 23:48:41 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 906412 bytes 2018-08-11 23:48:41 INFO brokerOutApi_thread_2 - register broker to name server localhost:9876 OK |
排查3:Producer 没有正确连接到 Name Server
如果按前两步检查没有问题,但启动还是报错,那就只剩下第三种情况了,最大可能是发送者和mq服务器之间的网络或端口不通,可以使用ping或者telnet确定问题。如果ping或者telnet连接不通,则说明producer无法连接到nameserver,很可能是防火墙的原因 ,需要联系运维工程师开通网络或端口权限。
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!