RocketMQ一个不兼容BUG: No route info for this topic

现象

在使用RocketMQ的DefaultMQProducer发送消息时,如果此消息的Topic之前不存在,则会报错:


Exception in thread "main" org.apache.rocketmq.client.exception.MQClientException: No route info for this topic, TopicTest

For more information, please visit the url, http://rocketmq.apache.org/docs/faq/

at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendSelectImpl(DefaultMQProducerImpl.java:1055)

at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1021)

at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1016)

at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:389)

at me.litian.test.mq.rocketmq.order.OrderedProducer.main(OrderedProducer.java:27)

RocketMQ其实是支持自动创建Topic的,而且Broker默认打开了这个开关,之所以发生这个问题,是因为代码自身的BUG。

原因

在DefaultMQProducer对象中有一个属性createTopicKey,用于设置消息的默认Topic,其取值为MixAll.AUTO_CREATE_TOPIC_KEY_TOPIC;

这个属性的取值需要和Broker配合,就是Broker在初始化时,会自动创建这个Topic;

但是,在RocketMQ4.3.1版本中,这个属性的取值发生了变化:

4.3.04.3.1
AUTO_CREATE_TOPIC_KEYTBW102

所以,导致从4.3.1版本开始,客户端和服务端不能跨版本使用;

解决办法

方法一

客户端使用和服务端同样的版本;

方法二

如何客户端和服务端版本不匹配,可以在Broker上手动创建这个默认Topic;

    原文作者:syserr
    原文地址: https://www.jianshu.com/p/c85237034e50
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞