4

我有一个Supervisor监督许多simple_one_for_one工作人员的名字,这些工作人员定期为我系统上的每个用户执行一项任务。

我希望应用程序在第一次启动时为每个用户启动一个工作人员Supervisor,并且我希望应用程序Supervisor在以后重新启动时执行相同的操作,无论出于何种原因。

目前我在Application'sstart(type, args)回调中动态启动所有子进程,但如果Supervisor重新启动,则不会启动所有子进程。

如何确保在Supervisor启动/重启后立即启动所有动态子工作人员?

(我的应用在 Elixir 中,但同样的原则也适用于 Erlang。)

4

1 回答 1

6

我做得很好的一种方法是使用另一个主管和“重新启动工作人员”。你的主管是新主管的孩子——它是重启工作者的兄弟。新主管使用one_for_allor rest_for_one,因此如果您的主管死亡,restart worker也会重新启动。

当restart worker重启后,就可以启动动态worker了。

于 2016-04-22T11:34:09.190 回答