RocketMQ MQClientException: No route info of this topic 报错

本文档分析了RocketMQ客户端遇到MQClientException: No route info of this topic异常的原因,包括broker未启动、防火墙配置不当、nameserver信息不正确等问题,并提供了详细的解决步骤,如检查防火墙设置、验证nameserver中topic信息、核对nameserver地址等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

MQClientException: No route info of this topicRocketMQ客户端的一个异常,表示在指定的主题上没有找到路由信息。这通常是由于以下原因之一引起的: 1. 主题不存在:确保你在RocketMQ中创建了名为"topic-1"的主题。你可以使用RocketMQ的管理工具或命令行工具来创建主题。 2. 主题路由信息未更新:如果你在创建主题之后立即使用它,可能会出现这个异常。在RocketMQ中,主题的路由信息需要一些时间来更新和分发到所有的Broker节点。请等待一段时间后再尝试使用主题。 3. 客户端配置错误:检查你的客户端配置,确保你正确指定了正确的NameServer地址和主题名称。确保你的客户端代码中没有拼写错误或其他语法错误。 解决这个问题的方法是: 1. 确保主题存在并且已正确创建。 2. 等待一段时间,以确保主题的路由信息已更新。 3. 检查你的客户端配置,确保你正确指定了正确的NameServer地址和主题名称。 4. 检查你的客户端代码,确保没有拼写错误或其他语法错误。 5. 如果问题仍然存在,尝试重新启动RocketMQ服务和你的应用程序。 ```java import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message; public class Producer { public static void main(String[] args) throws MQClientException { DefaultMQProducer producer = new DefaultMQProducer("producer_group"); producer.setNamesrvAddr("localhost:9876"); producer.start(); try { Message message = new Message("topic-1", "Hello RocketMQ".getBytes()); producer.send(message); System.out.println("Message sent successfully."); } catch (Exception e) { e.printStackTrace(); } producer.shutdown(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值