我們正在重新組織我們的應用程序監督樹,使其更加穩健地處理故障並重新啓動。但是,我們有一個場景,我們有一位家長主管,負責啓動四名兒童監督員。我們遇到的問題是,第一個孩子監督員啓動了幾個孩子的gen_servers,必須在第二個孩子監督員啓動之前啓動並初始化,否則將失敗。Erlang監督員,一個重要的孩子
所以,我需要類似下面的啓動:
test_app.erl - > super_supervisor - > [config_supervisor,auth_supervisor,rest_supervisor]
我遇到問題的訣竅是,config_supervisor必須完成在啓動auth_supervisor或rest_supervisor之前的所有初始化。通過rest_for_one啓動策略,本質上,我得到了這種行爲,但只有通過允許auth_supervisor失敗,因爲所需的配置不存在。我希望在移動到auth_supervisor之前請求config_supervisor完成它的初始化(包括啓動幾個gen_servers)。
這似乎是一個以前會被征服的常見情景,但是,我很難「搜索」解決方案。有沒有人有建議或示例代碼可能存在來處理這種情況?
這是錯誤的順序。如果任何'gen_server'實例死亡,'rest_for_one'會殺死關鍵進程。通常,關鍵流程應該靠近樹頂。 –
好吧,當我讀到這個問題時,它就是我所理解的,除非4個gen_servers啓動,否則此進程無法運行。我的措辭「關鍵過程」似乎是不合適的 – Pascal
謝謝@Pascal。這很接近,但我想我可能沒有正確描述這種情況。我會更新這個問題。 – RockyMountainHigh