gpt4 book ai didi

functional-programming - Erlang supervisor 和一个关键的 child

转载 作者:行者123 更新时间:2023-12-01 23:56:32 25 4
gpt4 key购买 nike

我们正在重新组织我们的应用程序监督树,以使其更强大地处理故障和重新启动。然而,我们有一个场景,我们有一个父监管者启动了四个子监管者。我们遇到的问题是第一个子主管启动了几个子 gen_servers,它们必须在第二个子主管启动之前启动和初始化,否则它将失败。

所以,我需要像下面这样的创业公司:

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)。

这似乎是一个以前可以克服的常见场景,但我很难“谷歌搜索”解决方案。是否有人有可能存在的建议或示例代码来处理这种情况?

最佳答案

监督者同步启动他们的子级,在启动下一个之前依次启动每个子级,按照它们在 childspeclist 中出现的顺序。所以你的 super_supervisor 应该以正确的顺序启动它的 child ,首先是 config_supervisor,然后是 auth_supervisor,最后是 rest_supervisor他们按那个顺序。主管必须(成功地)启动其所有子级才能被视为启动。因此,如果 config_supervisor 具有所有必须在初始化期间作为其子进程启动的必要进程,那么 super_supervisor 将不会启动其他主管,直到 config_supervisor完成了。

在这种情况下,如果子项在 childspeclist 中的顺序正确,则不需要 rest_for_one 来确保以正确的顺序开始。

对于工作进程 gen_server/gen_fsm/gen_event,当它们的 init 回调返回时,它们被认为已启动。

我是否正确理解了您的描述和问题?

关于functional-programming - Erlang supervisor 和一个关键的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com