我有一个主管one_for_one
重新启动策略。是否可以在子进程重新启动之间设置一些时间间隔?
例如,远程数据库被压碎,我想在恢复连接尝试之间等待 10 秒。
实际上,您可以让主管立即重新启动其子级并实现所谓的延迟初始化:
- 主管(立即)启动孩子(例如,gen_server)
- gen_server在其 init 函数中返回 0 超时
- 在handle_info,您执行活动等待(10 秒)以确保数据库已正确初始化
这样,您可以确保在正确初始化数据库后处理对gen_server的所有请求。
你不能用标准的supervisor
行为做到这一点,你需要实现你自己的sup
作为一个gen_server
,它捕获其他人的退出而不是它的parent
并手动重新启动他们的子项,但每次在重新启动子项之前,它还通过设置timeout
来检查 10 秒是否已过期