我们正在重新组织我们的应用程序监督树,以使其更稳健地处理故障和重新启动。但是,我们有一个场景,我们有一个父主管启动四个子主管。我们遇到的问题是第一个子主管启动了几个子 gen_server,这些子 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)。
这似乎是一个以前会被征服的常见场景,但是,我很难“谷歌搜索”一个解决方案。有没有人有可能存在处理这种情况的建议或示例代码?