天天看點

RocketMQ MQClientException: No route info of this topic 報錯

RocketMQ MQClientException: No route info of this topic 報錯

主要問題原因是消費端或生産端統一連接配接nameserver服務時,nameserver服務管理路由監控broker狀态,如果沒有broker程序啟動或者broker啟動時未指定nameserver的位址或者網絡政策不通,則nameserver找不到能使用的broker節點或者消費端和生産端連接配接不到nameserver,就會報這個異常。

嘗試解決方法:

(1)啟動broker時指定nameserver的位址:

./mqbroker -n localhost:9876
           

(2)檢查防火牆配置

開放9876端口,當然很有可能你也沒有開放10911端口。是以都開一下。確定消費端和生産端連接配接能夠連接配接到nameserver并且能夠從那裡擷取元資訊。

這裡有個CentOS7的參考:

https://www.cnblogs.com/qianzf/p/6991551.html

其他Linux版本情況防火牆軟體可能不一樣。

------------------------------------------------------------------------------------------------------

在編寫 消費者 用戶端程式通路RocketMQ時報錯如下:

Exception in thread "main" 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:662)
	at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1310)
	at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1256)
	at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:339)
	at SyncProducer.main(SyncProducer.java:16)
           

根據提示檢視官網文檔如下:

http://rocketmq.apache.org/docs/faq/

Producer complains “No Topic Route Info”, how to diagnose?
This happens when you are trying to send messages to a topic whose routing info is not available to the producer.

(1)Make sure that the producer can connect to a name server and is capable of fetching routing meta info from it.
(2)Make sure that name servers do contain routing meta info of the topic. You may query the routing meta info from name server through topicRoute using admin tools or web console.
(3)Make sure that your brokers are sending heartbeats to the same list of name servers your producer is connecting to.
(4)Make sure that the topic’s permssion is 6(rw-), or at least 2(-w-).
If you can’t find this topic, create it on a broker via admin tools command updateTopic or web console.
           

(1)確定生産者程式能夠連接配接到nameserver并且能夠從那裡擷取元資訊。

我的情況是這種情況,防火牆的問題,開放9876端口,當然很有可能你也沒有開放10911端口。是以都開一下。

這裡有個CentOS7的參考:

https://www.cnblogs.com/qianzf/p/6991551.html

其他Linux版本情況防火牆軟體可能不一樣。

(2)確定nameserver 确實包含 你要 發送的Topic的資訊。

執行下面的指令判斷一下,mqadmin是rocketmq/bin下面的一個 指令。

 sh mqadmin topicList -n 192.168.1.23:9876

 sh mqadmin topicstatus -n 192.168.1.23:9876 -t topicWarning

(3)確定你的broker 們 和 你的生産者程式 都對應相同的 nameserver 位址。

(4)確定topic的權限為6 或至少是2,保證有寫權限。

新增topic時可以指定該topic的權限 一般不是這個問題

sh mqadmin updateTopic -h檢視 

如果通過指令找不着 特定的topic的資訊(對應上面第二條),那就建立一個。

 sh mqadmin updateTopic –n 192.168.1.23:9876 –c DefaultCluster –t topicWarning

繼續閱讀