一、问题
本地两台虚拟机搭建了双主双从集群,同步模式下,在客户端向 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){}
}