rabbitmq源碼分析(一)

來源:互聯網
上載者:User

因為學習erlang,下載了傳說中的rabbitmq,這個是工業級,學習一下還是有必要的。看看大師們如何用erlang,:http://www.rabbitmq.com/server.html。

解壓後工程很整齊:

先分析啟動進入點,環境為win7,其實對程式進入點我一直不太瞭解,感覺erlang程式的進入點沒有固定的,雖然可以通過檔案中的一些東西來分析出來,感覺不方便。

開啟ebin目錄下發現了一個rabbit_app.in檔案,這個就是rabbitmq的應用檔案了。 {mod, {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)展開宏為rabbit_misc:start_applications([os_mon, mnesia, rabbit]);

上代碼:

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.

start_applications(Apps) ->
    manage_applications(fun lists:foldl/3,
                        fun application:start/1,
                        fun application:stop/1,
                        already_started,
                        cannot_start_application,
                        Apps).

原來application:start在這等著呢。這樣就啟動了這三個模組。

啟動rabbit時調用模組中的start/2方法,上代碼:

start(normal, []) ->
    case erts_version_check() of
        ok ->
            {ok, SupPid} = rabbit_sup:start_link(),
            true = register(rabbit, self()),

            print_banner(),
            [ok = run_boot_step(Step) || Step <- boot_steps()],
            io:format("~nbroker running~n"),
            {ok, SupPid};
        Error ->
            Error
    end.

首先檢查erlang版本,這裡面用到列表解析,充分發揮了erlang的模式比對。如果版本不低於系統要求的則返回ok,此時調用監督樹rabbit_sup:start_link/0方法啟動監督樹。開啟監督樹模組,

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/yuanhailu01/archive/2011/04/06/6305261.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.