简体   繁体   中英

Starting dynamic simple_one_for_one workers after supervisor starts

I have a named Supervisor that supervises many simple_one_for_one workers, which perform a task at regular intervals for each user on my system.

I want the app to start one worker for each user when the Supervisor starts for the first time, and I want the app to do the same if the Supervisor restarts at a later date, for whatever reason.

At the moment I start all the children dynamically in the Application 's start(type, args) callback, but if the Supervisor is restarted, that won't start all the child processes.

How do I ensure all the dynamic child workers are started immediately after the Supervisor starts/restart, at any time?

(My app is in Elixir, but the same principles apply to Erlang.)

One way I've done this that works pretty well is to use another supervisor and a "restart worker". Your supervisor is a child of the new one -- it's a sibling of the restart worker. The new supervisor uses one_for_all or rest_for_one , so that if your supervisor dies, the restart worker is also restarted.

When the restart worker is restarted, it can start the dynamic workers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM