org.apache.rocketmq.client.exception.MQClientException: No route info of this topic

消息队列
Exception in thread “main” org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, 123
spirng boot 整合消息队列时,提示No route info of this topic。
如果使用原有已创建的topic,可以发送消息成功,但是使用新的未创建的topic时,就会报错。
在网上查询攻略,众说纷纭。
有的说broker启动时没有设置autoCreateTopicEnable=true ,我重新配置该参数进行启动,也不行;
nohup sh bin/mqbroker -c /usr/local/rocketmq_cluster/2m-2s-async/broker.properties autoCreateTopicEnable=true &
有的说是防火墙没有关闭,我也查看了,防火墙已关闭
有的说pom.xml没有配置相关jar的.
如上所有操作都试过之后,还是不行,就尝试在服务器上执行生产者用发送消息,结果发现代码可以正常运行。
( javac -cp lib/rocketmq-client-4.1.0-incubating-SNAPSHOT.jar:lib/rocketmq-common-4.1.0-incubating-SNAPSHOT.jar:lib/rocketmq-remoting-4.1.0-incubating-SNAPSHOT.jar Test.java
)
这说明我们本地的jar引用有问题,但是我们的jar引用是正确的,不然旧topic不可能正常收发消息,我们考虑可能是jar版本号不一致的问题。
我们的解决方式是把服务器上的jar(如下图)下载到本地eclipse的lib文件夹中,并引入项目。然后我重新执行代码发现消息队列可以正常收发消息。
解决方案:把本地pom.xml中的引用改为和服务器上一致的版本。

但是rocketmq-client版本号由4.3.0降为4.1.0,我引用4.1.0会报错的,提示没有对应版本号,所以我只能修改为4.2.0;
fastjson版本号由1.2.49降为1.2.29
slf4j-api版本号保持1.7.5不变

https://blog.csdn.net/chenaima1314/article/details/79403113
https://blog.csdn.net/whhwkm/article/details/81783322
org.apache.rocketmq.client.exception.MQClientException: No route info of this topic_第1张图片


import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
public class Test {
    public static void main(String[] args) throws Exception {
        //Instantiate with a producer group name.
        DefaultMQProducer producer = new
   DefaultMQProducer("finance");
        // Specify name server addresses.
        producer.setNamesrvAddr("192.168.149.212:9876;192.168.149.213:9876");
//        producer.setNamesrvAddr("192.168.149.154:9876");

        producer.setVipChannelEnabled(false);
        //Launch the instance.
        producer.start();
        for (int i = 0; i < 100; i++) {
            //Create a message instance, specifying topic, tag and message body.
            Message msg = new Message("1234" /* Topic */,
                "TagA" /* Tag */,
                ("Hello RocketMQ " +
                    i).getBytes("UTF-8") /* Message body */
            );
            //Call send message to deliver message to one of brokers.
            SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
        }
        //Shut down once the producer instance is not longer in use.
        producer.shutdown();
    }
}

你可能感兴趣的:(消息队列)