【发布时间】:2018-01-31 10:42:27
【问题描述】:
我想做的是改变我的主管,尽最大努力让孩子们继续跑步,但如果他们的崩溃率超过强度,就放弃。这样,其余的孩子就可以继续奔跑。不过,现有的主管配置似乎不可能做到这一点,所以看起来我唯一的选择可能是实现我自己的主管,这样我就可以让它在收到EXIT 时以这种方式运行。
有没有办法在不编写自己的主管的情况下实现这样的自定义 OTP 主管行为?
【问题讨论】:
-
您能详细解释一下具体的用例吗?您所描述的听起来不像是主管没有满足您的需求,而更像是您可能正在尝试通过监督做一些有更好选择的事情。这听起来很像在
init/1期间尝试做一些容易失败的事情,导致进程在重新启动时很快崩溃。 -
所以我在这里从各种来源为内部监控工具提取服务遥测数据。我使用
simple_one_for_one监督并根据启动子项时传递的配置文件中的值动态创建这些子项。孩子属于gen_server,它会根据延迟消息定期处理请求,而在init 中唯一要做的就是将配置存储为状态并将初始延迟消息排队。这让我可以定期提取数据,每个工作人员都独立于其他工作人员。
标签: erlang elixir erlang-otp erlang-supervisor