使用Rocket MQ發(fā)送消息時報錯 No route info of this topic怀樟, 詳細錯誤信息如下:
com.aliyun.openservices.ons.api.exception.ONSClientException: defaultMQProducer send exception at com.aliyun.openservices.ons.api.impl.rocketmq.ProducerImpl.checkProducerException(ProducerImpl.java:238) at com.aliyun.openservices.ons.api.impl.rocketmq.ProducerImpl.send(ProducerImpl.java:132) at com.newcapec.mq.MqProducerService.main(MqProducerService.java:116) Caused by: com.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, recommend See http://rocketmq.apache.org/docs/faq/ for further details. at com.aliyun.openservices.shade.com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:581) at com.aliyun.openservices.shade.com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1132) at com.aliyun.openservices.shade.com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1086) at com.aliyun.openservices.shade.com.alibaba.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:257) at com.aliyun.openservices.ons.api.impl.rocketmq.ProducerImpl.send(ProducerImpl.java:123)?...?1?more
出現(xiàn)上面的錯誤薛训,主要有三種情況
第一種,Broker模塊不支持自動創(chuàng)建topic辈毯,并且topic沒有被手動創(chuàng)建過
第二種坝疼,Broker模塊沒有正確連接到NAMESRV
第三種,發(fā)送者沒有連接到NAMESRV
解決辦法
第一種情況是topic確實不存在谆沃,可以查看broker的日志確定topic是否真的存在钝凶。
登錄MQ所在的服務器,執(zhí)行如下命令(把recommend換成你的topic名稱)
cat ~/logs/rocketmqlogs/broker.log? | grep topicName=recommend
出現(xiàn)如下內容說明topic已經存在
如果沒有出現(xiàn)以上內容唁影,說明topic確實不存在腿椎。可以通過自動創(chuàng)建topic或手動創(chuàng)建topic解決
自動創(chuàng)建topic:啟動broker時加上自動創(chuàng)建topic的參數(shù)夭咬,如下,其中autoCreateTopicEnable=true表示自動創(chuàng)建topic
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true > ../broker.log &
手動創(chuàng)建topic:進入mq的安裝目錄 铆隘,執(zhí)行如下命令創(chuàng)建topic卓舵。
mq安裝的相對目錄是rocketmq-all-4.4.0/distribution/target/apache-rocketmq/bin
以下命令創(chuàng)建了一個名稱是orderPay的topic
sh mqadmin updateTopic -b localhost:10911 -t orderPay
第二種情況出現(xiàn)的概率較低,可以采用以下兩種方式確認
1. 查看broker的日志膀钠,出現(xiàn)如下內容掏湾,說明連接成功。
查看日志命令 cat ~/logs/rocketmqlogs/broker.log ?| grep register
2019-12-04 09:40:16 INFO brokerOutApi_thread_1 - register broker to name server localhost:9876 OK 2019-12-04 09:40:46 INFO brokerOutApi_thread_2 - register broker to name server localhost:9876 OK
2. 在mq的安裝目錄執(zhí)行如下命令
sh mqadmin clusterList -n localhost:9876
出現(xiàn)如下內容說明連接成功肿嘲,沒有問題
第三種情況出現(xiàn)的最大可能是發(fā)送者和mq服務器之間的網(wǎng)絡或端口不通融击,可以使用ping或者telnet確定問題。如果ping或者telnet連接不通雳窟,需要聯(lián)系運維工程師開通網(wǎng)絡或端口權限
我遇到的是第一種情況尊浪,topic確實不存在,是通過手動創(chuàng)建topic解決的
-- 赫連小伍原創(chuàng)封救,轉載注明出處拇涤,微信公眾號同名