背景
RocketMQ 源码版本 4.9.1-SNAPSHOT
下载了 RocketMQ 源码,在本地 IDE 中正常启动了 Broker 服务 和 NameServer 服务。
生产者发送消息的 demo 如下
在发送消息的过程中报错了,报错信息如下
从报错信息可以看到: **Topic 对应的路由信息没有正常获取到(Topic 名称为 TopicTest)。**也难怪,Broker 启动后没有人为地去创建 Topic 对应的队列,发送消息自然没办法获取到路由信息。
想到 Broker 有自动创建 Topic 的机制,可以通过在 Broker 的配置文件中添加如下配置:
autoCreateTopicEnable = true
复制代码
问题在于即使配置了这个参数,重启 Broker 服务之后,发送消息时还是如上的报错,因此打算仔细看看 RocketMQ 自动创建 Topic 的实现原理。
自动创建Topic机制
首先需要解决两个问题
- W1:Broker 注册路由信息方式
- W2:生产者获取路由信息的策略