
一、问题
本地两台虚拟机搭建了双主双从集群,同步模式下,在客户端向 rockermq 集群发送异步消息,提示 org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, base2
二、背景
在自己的虚拟机上搭建了双主双从:
vm1: 192.168.234.134 master1 slave2
vm2: 192.168.234.139 master2 slave1
三、现象
网上教的指定 autoCreateTopicEnable=true 使用过了,没有作用
现象一:
在客户端发送异步消息,提示 org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, base2
但是使用 rocketmq-console 查看,集群中的 broker 都是正常的,且 base2 这个话题的确已经存在
现象二:
在 for 循环发消息时,加个 sleep 一秒,消息发送就正常了
客户端代码:
public static void main(String[] args) throws Exception { // 实例化消息生产者 Producer DefaultMQProducer producer = new DefaultMQProducer("group1"); // 指定 Nameserver 地址 producer.setSendMsgTimeout(6000); producer.setVipChannelEnabled(false); producer.setNamesrvAddr("192.168.234.134:9876;192.168.234.139:9876"); // 启动 Producer 实例 producer.start(); producer.setRetryTimesWhenSendAsyncFailed(0); for (int i = 0; i < 3; i++) { final int index = i; // 创建消息,并指定 Topic,Tag 和消息体 Message msg = new Message("base2", "Tag1", ("Hello World" + i).getBytes()); producer.send(msg, new SendCallback() { public void onSuccess(SendResult sendResult) { System.out.println("发送结果:" + sendResult); } public void onException(Throwable e) { System.out.println("发送异常:" + e); } }); // 睡眠一秒 TimeUnit.MILLISECONDS.sleep(1000); } // 如果不再发送消息,关闭 Producer 实例。 producer.shutdown(); while (true){} }