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

2020-06-27 13:25:22 +08:00
 lincya

一、问题

本地两台虚拟机搭建了双主双从集群,同步模式下,在客户端向 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){}
}
1053 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/685025

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX