从rabbit模块启动 看rabbit.erl的 start()-> 函数
start() ->
try
ok = prepare(),
ok = rabbit_misc:start_applications(?APPS)
after
%%give the error loggers some time to catch up
timer:sleep(100)
end.
prepare()准备环境 然后调用rabbit_misc:start_applications(?APPS)
-define(APPS, [os_mon, mnesia, rabbit]).
看看rabbit_misc:start_applications
start_applications(Apps) ->
manage_applications(fun lists:foldl/3,
fun application:start/1,
fun application:stop/1,
already_started,
cannot_start_application,
Apps).
start_applications调用的是manage_applications 传递的参数是
fun lists:foldl/3,
fun application:start/1,
fun application:stop/1,
already_started,
cannot_start_application,
[os_mon, mnesia, rabbit]
这个比较精妙,仔细看看!分别对应到Iterate, Do, Undo, SkipError, ErrorTag, Apps,如下
manage_applications(Iterate, Do, Undo, SkipError, ErrorTag, Apps) ->
Iterate(fun (App, Acc) ->
case Do(App) of
ok -> [App | Acc];
{error, {SkipError, _}} -> Acc;
{error, Reason} ->
lists:foreach(Undo, Acc),
throw({error, {ErrorTag, App, Reason}})
end
end, [], Apps),
ok.
实际如下
manage_applications(lists:foldl/3, application:start/1, application:stop, already_started, cannot_start_application, [os_mon, mnesiarabbit]) ->
lists:foldl(fun (os_mon, Acc) ->
case application:start(os_mon) of
ok -> [os_mon | Acc];
{error, {already_started, _}} -> Acc;
{error, Reason} ->
lists:foreach(application:stop, Acc),
throw({error, {cannot_start_application, os_mon, Reason}})
end
end, [], [os_mon, mnesia, rabbit]),
ok. 依次启动os_mon, mnesia, rabbit
使用application:start(rabbit) 会调用rabbit:start()/2
分享到:
相关推荐
1. **Extension**:Rabbit Kernel的扩展引擎允许开发者通过插件或模块方式轻松添加新的功能,增强了框架的可扩展性。 2. **Multi-Tenant**:租户引擎使得Rabbit Framework能够处理多租户场景,每个租户可以有独立的...
RCM3000系列的兔子核心模块是基于Rabbit 3000微处理器的紧凑型开发平台。这些模块通常用于快速原型设计和产品开发,它们集成了微处理器、存储器、网络接口等关键组件,便于用户专注于应用程序的开发而非底层硬件的...
Spring-Rabbit是Spring Framework的一个模块,它为RabbitMQ提供了全面的Java支持,包括生产者(Producer)、消费者(Consumer)和容器(Container)等组件。通过Spring Boot的自动配置,开发者可以轻松地在Spring...
为了确保微处理器能够可靠地启动和恢复工作状态,处理器提供了一套复位和引导机制。第3章对这部分内容进行了深入探讨。它包括复位和引导的概述、依赖关系(如I/O引脚、时钟、其他寄存器和中断)和具体操作流程。此外...
根据提供的文件内容,我们可以得知这份文档是关于Rabbit RCM3750 RabbitCore模块的用户手册。手册的内容包含了产品的介绍、特性、优势、以及如何进行开发与评估。接下来,我们将详细说明每个章节中涵盖的知识点。 ...
综上所述,该用户手册是一份全面的指导文档,涵盖从基础的模块功能介绍到具体的开发调试的全过程,帮助用户快速掌握RabbitCore RCM3365/RCM3375模块的应用和开发。同时,手册也体现了Z-World公司(Rabbit ...
在通信与网络领域,Rabbit Semiconductor公司发布了一项重大创新,推出了两款新的RabbitCore模块——RCM4400W和RCM4510W。这两款模块分别基于Wi-Fi/802.11和ZigBee/802.15.4无线技术,旨在为全球工商企业和物联网...
- 安装Dynamic C软件:这是专为Rabbit模块系列设计的编程软件,用于编写和调试应用程序。 - 硬件连接指导:包括将模块固定到原型板、连接编程电缆和提供电源等步骤。 - 开始使用Dynamic C:启动软件并运行一个...
开发者可以启动Dynamic C编程环境开始开发工作,这是一个专为Rabbit Semiconductor产品的开发设计的集成开发环境。文档中还提供了一个示例程序,通过运行这个程序,开发者可以了解如何使用模块,并在遇到问题时进行...
Rabbit RCM3305和RCM3315是Z-World公司开发的两款C可编程核心模块,它们都具备串行闪存存储和以太网接口。RCM3305和RCM3315用户手册详细地介绍了如何开发、评估和运行这两款模块,为用户提供了一个全面的指南。 ...
Vite摒弃了传统的预构建步骤,采用了浏览器原生的ES模块加载,实现了快速启动和热更新。这使得开发者能够在代码保存时立即看到改动,极大地缩短了开发周期。Vite还支持树莓派等轻量级设备,拓展了项目的适用范围。 ...
从上表可以看出,Rabbit 2000 在计算性能方面表现出色,特别是在乘法运算和平方根运算中优势明显。 #### Dynamic C 的增强特性 - **丰富的库函数**:提供了一系列内置的库函数,简化了编程过程。 - **函数链**:...
服务器端响应并启动`rabbit_client_sup`监督树,包括`rabbit_connection_sup`,进一步创建`rabbit_connection_helper_sup`和`rabbit_reader`进程。 - 客户端发送AMQP协议头,即`, 0, 0, 9, 1>>`,作为连接的一部分...
1. **易用性**:Rabbitpack通过预设一组最佳实践配置,使得开发者无需从零开始编写Webpack配置,减少了大量重复工作。 2. **模块化**:Rabbitpack支持模块化的Webpack配置,允许开发者根据需求按需引入和组合配置...
本文介绍了一个基于Rabbit2000微处理器的网络消防报警系统,该系统采用模块化和智能分布式设计,具有高效编程、强大联网能力、可靠通信和高实时性的优点,适用于现代高层建筑的智能消防需求。 Rabbit2000微处理器是...
Rabbit2000的RabbitCoreRCM2000模块集成了该微处理器、大容量Flash及SRAM存储器、以太网接口和RS232/485接口,可以直接连接网络和各种串行设备,极大便利了网络连接和监控。 在系统功能模块设计方面,网络消防报警...
工作流程大致如下:系统启动后进行自检,然后初始化蓝牙模块并搜索附近的蓝牙设备。一旦建立通信链接,A/D转换模块会根据指令采集现场数据,经处理后通过蓝牙发送或存储在Web服务器上。同时,D/A转换模块用于模拟量...
例如,如果你想要添加一个新功能,可以在`rabbitmq_server/src`目录下创建一个新的Erlang模块,然后在`rabbit`模块中调用它。确保遵循Erlang的模块命名规范,并在`rabbit.app`配置文件中声明你的模块。 在测试和...
* spring-boot-starter-amqp:通过spring-rabbit来支持AMQP协议。 * spring-boot-starter-aop:支持面向方面的编程即AOP,包括spring-aop和AspectJ。 * spring-boot-starter-artemis:通过Apache Artemis支持JMS的...
它提供了丰富的功能和模块,适用于各种企业级应用场景。 项目的主要特性和功能 1. 用户管理包括用户登录、注册、权限管理、角色管理等功能。 2. 权限管理细粒度的权限控制,支持菜单权限、按钮权限等。 3. 日志...