Rocket MQ报错No route info of this topic的问题探究
Posted 翎野君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rocket MQ报错No route info of this topic的问题探究相关的知识,希望对你有一定的参考价值。
背景
系统订单创建成功之后需要发送订单创建成功的消息,但是今天突然遇到了如下的报错
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 证明是没有问题的
[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 字样就说明是成功的
[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,很可能是防火墙的原因 ,需要联系运维工程师开通网络或端口权限。
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。
首发链接:https://www.cnblogs.com/lingyejun/p/16369083.html
微服务:MQClientException: No route info of this topic, mytopic 报错解决
报错描述:
我是在windows上使用RocketMQ,环境配置,文件配置,MQ启动,一系列操作都成功后,然后在项目中使用MQ的时候报了这个错!!!
问题分析
出现这个报错无非就六大毛病,如下:
- 配置autoCreateTopicEnable=true,如果这个属性没有配置,且你没有手动创建topic,就会报出上面的异常信息No route info of this topic也就是Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic。
- Producer没有正确连接到Name Server
- Broker没有正确连接到Name Server
- Windwos下mq的安装版本和pom.xml中使用的jar包版本不对
- 缺少fastjson包或者fastjson包版本不对
- 防火墙未关闭问题
解决方案:
我在上面六大毛病中,是第一条的问题。Broker禁止自动创建Topic,并且用户没有通过手工方式创建Topic。所以我主要解决是在启动MQ的时候,加上autoCreateTopicEnable=true即可。
说明:因为我是在windows上安装的RocketMQ,所以在RocketMQ安装目录找到bin目录。
在bin目录下创建两个启动文件,一个名为MqNameServe.bat,一个名为MqBroker.bat。
MqNameServe.bat文件内容如下:
start mqnamesrv.cmd
MqBroker.bat文件内容如下:
start mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
然后先启动MqNameServe.bat文件在启动MqBroker.bat文件。问题解决!!!
最好祝大家生活愉快!!!
以上是关于Rocket MQ报错No route info of this topic的问题探究的主要内容,如果未能解决你的问题,请参考以下文章
关于Rocketmq报错: No route info of this topic
org.apache.rocketmq.client.exception.MQClientException: No route info of this topic