首页 > 编程语言 >RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析

RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析

时间:2024-01-06 12:34:13浏览次数:29  
标签:BrokerController 创建 启动 Broker 源码 NameServer RocketMQ

欢迎关注公众号:【11来了】 发送 “资料” 可以下载Redis、JVM系列文章PDF版本!

作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!

RocketMQ 原理分析

启动 RocketMQ 源码

分析 RocketMQ 之前,先确保可以成功启动起来


NameServer 启动

在 Idea 中配置 ROCKETMQ_HOME 环境变量为自己安装 RocketMQ 的位置即可

ROCKETMQ_HOME=D:\Project\IDEA\Rocket-MQ\rocketmq-all-5.1.4-source-release

RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析_启动流程


Broker 启动

启动 Broker 指定 NameServer 地址以及配置文件地址,以及 ROCKETMQ_HOME 变量即可

RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析_配置文件_02


上边的 custom.conf 配置文件就是 broker.conf 多加了 3 行配置,如下:

RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析_启动流程_03


Broker 启动流程分析

既然需要分析 Broker 启动流程,先下载 RocketMQ 源码

https://rocketmq.apache.org/download

Broker 启动的入口为 broker 模块的 BrokerStartup 启动类

RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析_配置文件_04


Broker 启动有两个方法:

  • createBrokerController(args) :先创建 BrokerController 控制器,BrokerController 控制器对象包含了各种 Config 配置对象以及 Manager 管理对象
    在该方法中,主要通过 buildBrokerController() 方法来创建 BrokerController 控制器
  1. 创建 四大配置类
  • BrokerConfig:Broker 服务自己本身的配置
  • NettyServerConfig:Broker 作为服务端,开启端口接收消息的 Netty 服务端配置
  • NettyClientConfig:Broker 作为客户端,连接 NameServert 的 Netty 客户端配置
  • MessageStoreConfig:消息存储相关的配置
  1. 解析 命令行参数
/**
 * 这里解析命令行或 Idea Arguments 的参数
 * 如果自己开发插件需要接收命令启动参数的话,可以参考
 * Broker 启动命令为:./mqbroker -n localhost:9876 -c D:/RocketMQ/conf/custom.conf autoCreateTopicEnable=true
 */
Options options = ServerUtil.buildCommandlineOptions(new Options());
CommandLine commandLine = ServerUtil.parseCmdLine("mqbroker", args, buildCommandlineOptions(options), new DefaultParser());
  1. 将四大配置类装入 BrokerController:
/**
 * 将 4 大配置,装进 BrokerController 中
 * 在 BrokerController 构造方法还创建了:
 * 1. 各种 Manager 管理对象
 * 2. 各种 Processor 处理对象
 * 3. 各种 Queue 队列对象
 */
final BrokerController controller = new BrokerController(brokerConfig, nettyServerConfig, nettyClientConfig, messageStoreConfig);

创建完 BrokerController 控制器之后,还会判断是否创建成功,以及注册钩子

  1. 判断是否创建成功,如果创建失败,就尝试关闭 BrokerController
boolean initResult = controller.initialize();
if (!initResult) {
    controller.shutdown();
    System.exit(-3);
}
  1. 注册 JVM 进程关闭的钩子,在进程关闭时,回收一些资源
// 添加 JVM 钩子,在 JVM 关闭时,会触发钩子,做一些回收动作
Runtime.getRuntime().addShutdownHook(new Thread(buildShutdownHook(controller)));
  • start(brokerController) :创建完 BrokerController 后,启动 BrokerController
    在该方法中,通过 controller.start(); 来启动 BrokerController
  1. 调用 NameServer 的通信组件启动
// 调用 NameServer 的通信组件启动
if (this.brokerOuterAPI != null) {
    this.brokerOuterAPI.start();
}
  1. 向所有的 NameServer 注册 Broker 自己
BrokerController.this.registerBrokerAll(true, false, brokerConfig.isForceRegister());
  1. 发送心跳
if (this.brokerConfig.isEnableControllerMode()) {
    scheduleSendHeartbeat();
}


标签:BrokerController,创建,启动,Broker,源码,NameServer,RocketMQ
From: https://blog.51cto.com/u_16186397/9126660

相关文章

  • 智慧工地智能化管理平台源码
    智慧工地是一种基于信息技术和大数据应用的智能化管理平台,旨在提升建筑施工现场的安全、效率和质量。通过物联网、云计算、人工智能等技术手段,智慧工地可以对施工现场的各个要素进行全面感知、实时交互和智能分析,以实现更高效、更安全、更环保的施工过程。 技术架构:微服务架构+Jav......
  • PHP语言B/S架构的医院不良事件报告系统源码
    医院安全(不良)事件管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要对象,可以自动、及时、实际地反应医院的安全、不良、近失事件的情况,更好地掌握不良事件的发生趋势,未及时采取适当的管理措施和流程、制度改进提供了良好的量化依据。系统通......
  • RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及事务消息收发、最大重试消费
    欢迎关注公众号:【11来了】发送“资料”可以下载Redis、JVM系列文章PDF版本!作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!事务消息收发流程如下:发送给MQ一条任务操作MQ的Broker成功收到后,那么发送方就开始执行原子db业务如果执行原子......
  • 多进程启动方法"spawn"、"fork"的选择
    官方指导 实践使用官方的例子:python版本为3.9.6根据官方的说法,3.8开始默认就是spawn了,而不是fork。frommultiprocessingimportProcess,Lockdeff(l,i):l.acquire()try:print('helloworld',i)finally:l.release()if__name__......
  • 点餐系统源码(小程序+APP+H5)-外卖-点餐-餐饮
     PHP点餐系统是餐营业管理的“机械”部分。它们是获取我们的预测、实际订单、安全库存和订单数量并将其转换为采购订单或生产订单的程序。由于其机械性质,订购系统并没有太多理论。但这并不意味着您不需要了解一些事情。PHP点餐系统是一种基于Web的应用程序,旨在帮助餐厅和餐馆管......
  • H6911升压恒流芯片 2.5V启动 锂电池无频闪调光顺滑100W大功率
    H6911是一款外围电路简洁的宽调光比升压调光LED恒流驱动器,可适用于2.6-40V输入电压范围的LED恒流照明领域。H6911可以实现高精度的恒流效果,输出电流恒流精度≤±3%,电压工作范围为2.6-40V,可以轻松满足锂电池及中低压的应用需求,输出耐压仅由MOS耐压决定。PWM调光支持高辉应用,支持1K以......
  • 安卓期末小项目TrackTable收支表+源码
    一、需求分析这是一款账目记录、分析App,本系统主要功能有:用户登录注册、首页账单分析、上传账单、搜索账单信息、个人信息、重置密码、数据效验。系统功能图系统总用例图二、系统开发平台环境IDE:AndroidStudio 2021.1.x插件:simpleUMLCE工具:Visustinv8DemoJava版本:Java11OS:win11......
  • 【Redis深度专题】「核心技术提升」从源码角度探究Redis服务的内存使用、清理以及逐出
    背景介绍Redis作为一种高性能的内存NoSQL数据库,其容量受限于最大内存的限制。用户在使用阿里云Redis时,除了对性能和稳定性有较高的要求外,对内存占用也非常敏感。然而,在实际使用中,一些用户可能会发现他们的线上实例的内存占用比预期的要大。内存较高的场景在使用Redis时,以下是一些可......
  • mac下appium定位元素检察器会话在启动会话后,界面一直在加载中
    1.检查Appium服务器是否正常运行,可以在终端中输入appium查看是否正常启动;2.检查手机是否正常连接,可以在终端中输入idevice_id-l查看是否有设备连接;3.检查Appium服务器和手机之间的连接,可以在终端中输入ideviceinfo-u<device_udid>查看是否有设备连接;4.检查Appium服务器......
  • 基于SpringBoot+Vue的线上课程管理系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......