【发布时间】:2020-07-22 13:05:44
【问题描述】:
我有一个 Erlang 应用程序,其中我有一个 simple_one_for_one 主管,负责监督一组进程,这些进程监视网页上的变化(每个孩子一个 URL)。
在将相关主管添加到应用程序的顶级主管(以及其他一些进程)之后,我启动了应该在我的应用程序行为的 start 函数中处于活动状态的子项。然后随着条目的添加/删除(并且条目被持久化到数据库中),子项会动态启动和停止。
如果这个 simple_one_for_one 监管者因为太多子节点崩溃(例如由于网络问题)而崩溃,监管者本身会重新启动,但它的子节点会丢失。此时我想检查 DB 并重新启动应该处于活动状态的孩子。
但是,我应该如何重新启动孩子?我怎么知道主管重新启动了?我应该安排从主管自己的start_link 函数启动孩子吗?有没有更好的设计方法?
【问题讨论】:
-
你不应该有一个以上的主管来管理它吗?
-
@CallamDelaney 不确定你的意思。如果我在
simple_one_for_one主管之上有一个主管(我已经有了 - 一个one_for_one主管还监督其他一些事情),那个主管应该如何知道何时重新启动simple_one_for_one主管的孩子?