`
jzhihui
  • 浏览: 266059 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

RabbitMQ源码分析 - 启动

阅读更多

RabbitMQ是一个消息队列的实现,基于AMQPAdvanced 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

2
0
分享到:
评论

相关推荐

    java8集合源码分析-code-study:代码学习

    集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...

    java8集合源码分析-java-mistakes:java-错误

    集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...

    java8集合源码分析-common-mistakes:常见错误

    集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...

    java8集合源码分析-java-mistake:java错误

    集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...

    java8集合源码分析-common-business-mistakes:常见的商业错误

    集合源码分析 《Java业务开发常见错误100例》源码目录 专栏地址 点赞趋势 如果觉得源码对你有帮助,欢迎Star 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + ...

    java8集合源码分析-java-common-mistakes:《Java业务开发常见错误100例》

    java8集合源码分析《Java业务开发常见错误100例》源码目录专栏地址点赞趋势如果觉得源码对你有帮助,欢迎Star源码说明专栏的所有代码基于Java8+SpringBoot2.2.1.RELEASE+SpringCloudGreenwich.SR4+SpringDataMoore-...

    java8集合源码分析-geek-java-common-mistakes:极客时间-Java业务开发常见错误100例

    集合源码分析 《Java业务开发常见错误100例》源码目录 源码说明 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + Spring Data Moore-SR4开发,基于Maven做依赖管理。 每一个...

    java8源码-Emall:电子商城

    4.启动rabbitmq服务 5.启动nacos服务 应用列举(该项目所使用的三方应用) 服务 服务名 默认端口 备注 关系型数据库 mysql 3306 一个应用服务单独一个数据库 非关系型数据库 redis 6379 目前共用redis服务,根据key不同...

    java8源码-spring-boot-cloud2:spring-boot-cloud2

    源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...

    spring-boot-source:Spring Boot源码分析+注解

    spring-boot-source Spring Boot源码分析1.核心原始主线流程分析2.AutoConfig自动装配过程-Mybatis RabbitMQ Redis等自动装配过程3.Spring Boot与IOC关联4,Spring Boot集成的Tomcat启动流程

    java8源码-gatewaysecuritytest:网关安全测试

    源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...

    java8源码-springcloud:春云

    源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:...

    java8源码-gitlg.com:gitlg.com

    源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...

    java8源码-SpringCloud_oac:基于SpringCloud2.0的微服务开发脚手架,整合了spring-security-oa

    源码 快速开始 先决条件 开发环境 克隆代码库: git clone https://gitee.com/toopoo/SpringCloud.git 生成ide配置: mvn idea:idea 并导入对应的ide进行开发,IDE安装lombok插件 编译 & 启动 1.启动基础服务:docker...

    SpringCloud精品屋微服务治理版

    MyBatis3DynamicSql、Sharding-Jdbc、Redis、RabbitMq、ElasticSearch、Docker等流行技术,集成了Nacos注册中心/配置中心、Spring Cloud Gateway网关、Spring Boot Admin监控中心、ELK分布式日志分析等基础服务。...

    基于SpringBoot+Vue搭建的多功能体育场地智能管理系统源码+数据库+项目说明.zip

    * 情况分析 ## 技术栈 * SpringBoot+Vue搭建 * MyBatis+mysql+durid * 消息队列RabbitMq * 定时任务 * Spring Security * 线程同步锁 * apache的poi文件导出api ## 改进 * 由于前后端分离,项目加载速度快了很多...

    Novel-Cloud小说精品屋微服务版-其他

    MyBatis3DynamicSql、Sharding-Jdbc、Redis、RabbitMq、ElasticSearch、Docker等流行技术,集成了Nacos注册中心/配置中心、Spring Cloud Gateway网关、Spring Boot Admin监控中心、ELK分布式日志分析等基础服务。...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 socketserver源码分析tcp版本 05 socketserver源码分析udp版 06 ftp作业要求讲解 07 补充:认证客户端链接合法性 第32章 01 FTP之参数解析与命令分发 02 FTP之逻辑梳理 03 FTP之验证功能 05 FTP之文件上传 06 ...

Global site tag (gtag.js) - Google Analytics