主要问题原因是消费端或生产端统一连接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