求教大佬一个 RocketMQ 的神奇问题

lincya 10天前 8

一、问题

本地两台虚拟机搭建了双主双从集群,同步模式下,在客户端向 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){}
}
最新回复 (0)
  • 游客
    2
返回