RabbitMQ是一个消息队列的实现,基于AMQP(Advanced Message
Queuing Protocol)。最近因为工作需要,打算深入了解RabbitMQ的架构以实现,后续会出一系列文章记录分析过程。这篇总结RabbitMQ的启动过程。
(注:分析代码基于RabbitMQ 2.8.2)
RabbitMQ的启动入口在[$RABBIT_SRC/src/rabbit.erl
--> start/2]。主要代码如下:
start(normal, []) ->
case erts_version_check() of
ok ->
{ok, SupPid} = rabbit_sup:start_link(),
true = register(rabbit, self()),
[ok = run_boot_step(Step) || Step <- boot_steps()],
io:format("~nbroker running~n"),
{ok, SupPid};
Error ->
Error
end.
其中rabbit_sup:start_link/0启动rabbit的监控树。最重要是这个调用[ok
= run_boot_step(Step) || Step <- boot_steps()]。
boot_steps会从已加载的模块中提取自定义属性rabbit_boot_step的值(大部分定义在[$RABBIT_SRC/src/rabbit.erl]文件中),该结构定义了rabbit在启动过程中的一个启动步骤,其中包含:启动该步骤的启动入口,该步骤所依赖的步骤以及依赖于该步骤的步骤。其结构如下:
-rabbit_boot_step({rabbit_registry,
[{description, "plugin registry"},
{mfa, {rabbit_sup, start_child,
[rabbit_registry]}},
{requires, external_infrastructure},
{enables, kernel_ready}]}).
其中rabbit_registry定义步骤名称,mfa定义启动入口,requires定义该步骤所依赖的步骤(组名),enables说明依赖于该步骤成功执行的步骤。
启动步骤可以分组。一组步骤的启动会依赖于另一组步骤的成功执行。像上面的rabbit_registry就依赖于external_infrastructure(包含多个启动步骤)的成功执行,而rabbit_registry的成功启动则会使kernel_ready进入准备状态。实际上,会有多个启动步骤会使kernel_ready进入准备状态,只有所有这些启动步骤都成功启动后,依赖于kernel_ready的步骤才能启动(像rabbit_log, rabbit_event都会使kernel_ready进入准备状态)。
RabbitMQ就根据这些启动步骤之间的依赖关系,构造一个有向无环图(这跟我在ganger里对进程依赖关系的组织类似),并拓扑排序所有步骤(参见[$RABBIT_SRC/src/rabbit.erl --> sort_boot_steps/2]),生成唯一的启动顺序,然后按照该启动顺序调用相应启动步骤的MFA启动相应功能(参见[$RABBIT_SRC/src/rabbit.erl --> run_boot_steps/2])。
(具体有哪些启动步骤,以及每个步骤的具体功能参见这篇文章:RabbitMQ
Boot Process)
分享到:
相关推荐
集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...
集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...
集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...
集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...
集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...
java8集合源码分析《Java业务开发常见错误100例》源码目录专栏地址点赞趋势如果觉得源码对你有帮助,欢迎Star源码说明专栏的所有代码基于Java8+SpringBoot2.2.1.RELEASE+SpringCloudGreenwich.SR4+SpringDataMoore-...
集合源码分析 《Java业务开发常见错误100例》源码目录 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + Spring Data Moore-SR4开发,基于Maven做依赖管理。 每一个...
4.启动rabbitmq服务 5.启动nacos服务 应用列举(该项目所使用的三方应用) 服务 服务名 默认端口 备注 关系型数据库 mysql 3306 一个应用服务单独一个数据库 非关系型数据库 redis 6379 目前共用redis服务,根据key不同...
源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...
spring-boot-source Spring Boot源码分析1.核心原始主线流程分析2.AutoConfig自动装配过程-Mybatis RabbitMQ Redis等自动装配过程3.Spring Boot与IOC关联4,Spring Boot集成的Tomcat启动流程
源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...
源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:...
源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...
源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...
MyBatis3DynamicSql、Sharding-Jdbc、Redis、RabbitMq、ElasticSearch、Docker等流行技术,集成了Nacos注册中心/配置中心、Spring Cloud Gateway网关、Spring Boot Admin监控中心、ELK分布式日志分析等基础服务。...
* 情况分析 ## 技术栈 * SpringBoot+Vue搭建 * MyBatis+mysql+durid * 消息队列RabbitMq * 定时任务 * Spring Security * 线程同步锁 * apache的poi文件导出api ## 改进 * 由于前后端分离,项目加载速度快了很多...
MyBatis3DynamicSql、Sharding-Jdbc、Redis、RabbitMq、ElasticSearch、Docker等流行技术,集成了Nacos注册中心/配置中心、Spring Cloud Gateway网关、Spring Boot Admin监控中心、ELK分布式日志分析等基础服务。...
04 socketserver源码分析tcp版本 05 socketserver源码分析udp版 06 ftp作业要求讲解 07 补充:认证客户端链接合法性 第32章 01 FTP之参数解析与命令分发 02 FTP之逻辑梳理 03 FTP之验证功能 05 FTP之文件上传 06 ...