我是erlang和rabbitmq的新手,并开始使用RabbitMQ代码库。我发现在rabbit.erl start / 2函数实现但看起来像start / 0或boot / 0是需要为rabbitMQ启动调用的函数。对于一个非常基本的问题道歉,但非常感谢任何帮助理解RabbitMQ的代码流程,专门用于启动和兔子启动步骤。
提前致谢。
答案 0 :(得分:1)
RabbitMQ启动过程在此处记录:https://github.com/videlalvaro/rabbit-internals/blob/master/rabbit_boot_process.md
我很想知道你为什么要调查它。
答案 1 :(得分:0)
您正在查看的rabbit.erl
RabbitMQ文件实现了Application behaviour。这意味着当Erlang VM被告知启动rabbit
应用程序时,它将查找.app文件(RabbitMQ位于ebin/rabbit_app.in
中)。在第16行,您可以看到rabbit
是负责启动应用程序的模块。 Erlang假设模块实现了应用程序行为(如果没有,你肯定会遇到错误)。一旦Erlang完成所有设置,它就会调用start/2
中的rabbit.erl
回调。这反过来调用rabbit_sup:start_link/0
。我之前从未使用过RabbitMQ所以我不确定之后发生了什么,但很可能主管启动了RabbitMQ运行所需的所有其他主管和工作进程。
至于start/0
和boot/0
,它们不是Erlang回调函数。它们是RabbitMQ工程师创建的自定义函数。我想这些函数用于在特定场景中启动应用程序(例如测试,在开发过程中在解释器中启动应用程序等)。
希望这有帮助!检查Erlang模块时,始终查找behaviour
模块属性(-behaviour(application).
)。一旦了解了模块实现的行为,您就可以查找该行为(erlang application behavior)并了解更多有关工作方式的信息。