• RocketMQ源码解析-topic创建机制


    1. RocketMQ Topic创建机制

    RocketMQ Topic创建机制分为两种:一种自动创建,一种手动创建。可以通过设置broker的配置文件来禁用或者允许自动创建。默认是开启的允许自动创建

    autoCreateTopicEnable=true/false

    下面会结合源码来深度分析一下自动创建和手动创建的过程。

    2. 自动Topic

    默认情况下,topic不用手动创建,当producer进行消息发送时,会从nameserver拉取topic的路由信息,如果topic的路由信息不存在,那么会默认拉取broker启动时默认创建好名为“TBW102”的Topic,这定义在org.apache.rocketmq.common.MixAll类中

    1. // Will be created at broker when isAutoCreateTopicEnable
    2. public static final String AUTO_CREATE_TOPIC_KEY_TOPIC = "TBW102";
    3. 复制代码

    自动创建开关是下BrokerConfig类中有一个私有变量:

    1. @ImportantField
    2. private boolean autoCreateTopicEnable = true;
    3. 复制代码

    这变量可以通过配置文件配置来进行修改,代码中的默认值为true,所以在默认的情况下Rocket MQ是会自动创建Topic的。
    在Broker启动,会调用TopicConfigManager的构造方法,在构造方法中定义了一系列RocketMQ系统内置的一些系统Topic(这里只关注一下TBW102):

    1. {
    2. // MixAll.AUTO_CREATE_TOPIC_KEY_TOPIC
    3. if (this.brokerController.getBrokerConfig().isAutoCreateTopicEnable()) {
    4. String topic = MixAll.AUTO_CREATE_TOPIC_KEY_TOPIC;
    5. TopicConfig topicConfig = new TopicConfig(topic);
    6. this.systemTopicList.add(topic);
    7. topicConfig.setReadQueueNums(this.brokerController.getBrokerConfig()
    8. .getDefaultTopicQueueNums()); //8
    9. topicConfig.setWriteQueueNums(this.brokerController.getBrokerConfig()
    10. .getDefaultTopicQueueNums()); //8
    11. int perm = PermName.PERM_INHERIT | PermName.PERM_READ | PermName.PERM_WRITE;
    12. topicConfig.setPerm(perm);
    13. this.topicConfigTable.put(topicConfig.getTopicName(), topicConfig);
    14. }
    15. }
    16. 复制代码

    这里有 this.brokerController.getBrokerConfig().isAutoCreateTopicEnable() 这样一段代码,在开启允许自动创建的时候,会把当前Topic的信息存入topicConfigTable变量中。然后通过发送定期发送心跳包把Topic和Broker的信息发送到NameServer的RouteInfoManager中进行保存。在BrokerController中定义了这样的一个定时任务来执行这个心跳包的发送:

    1. this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
    2. @Override
    3. public void run() {
    4. try {
    5. BrokerController.this.registerBrokerAll(true, false, brokerCon
  • 相关阅读:
    微软AI文生图新突破,用于图像生成的多LoRA组合训练模型Multi-LoRA-Composition
    项目管理中的变数:从不同角度洞悉团队管理的重要性
    MYSQL一次慢查询优化,不要被“索引“蒙蔽了双眼
    05-SA8155 QNX Hypervisor BSP之Interrupts中断
    【JavaScript】基础学习记录
    弹性蛋白酶的用途和化学性质
    点击化学DBCO-PEG-FITC|二苯并环辛炔-聚乙二醇-异硫氰基荧光素
    LINUX定时解压缩方案
    题目 1058: 二级C语言-求偶数和(python详解)——练气四层中期
    Linux服务器部署java项目
  • 原文地址:https://blog.csdn.net/Trouvailless/article/details/126425977