Erlang:supervisores en cascada?
-
11-09-2019 - |
Pregunta
¿Es posible conectar supervisores en cascada dentro de una aplicación?
P.ej.supervisor sup1
generando un proceso hijo que crea un supervisor sup2
?
Solución
Es posible que desee agregar al niño como supervisor.
Es una entrada en la childspec de un niño de un supervisor. El "tipo" de que el niño se puede ajustar a "supervisor":
http://www.erlang.org/doc/design_principles/sup_princ # especificaciones .html
Probablemente usted puede hacerlo a través del niño que comienza un supervisor en sí también, pero por lo menos es menos elegante y es menos evidente lo que está haciendo.
HTH, h.
Otros consejos
Sí, sólo tiene que añadir los supervisores como hijos de un supervisor. O mezclar y combinar. Hago algo como esto por lo general:
(en mi top supervisor de nivel)
init([]) ->
Args = [],
ModuleArray = [get_info(Module, Args)
|| Module
<- [emx_nodestate, emx_sup_data, emx_sup_util, emx_sup_api,
emx_flow]],
{ok, {{one_for_one, 3, 1}, ModuleArray}}.
get_info(Module, Args) ->
{Module, {Module, start_link, [Args]}, permanent, 10000,
worker, [Module]}.
Y entonces algo así como emx_sup_data (supervisor de la conducta) contiene:
init([]) ->
Args = [],
ModuleArray = [get_info(Module, Args)
|| Module <- [job_housekeep]],
{ok, {{one_for_all, 3, 1}, ModuleArray}}.
get_info(Module, Args) ->
{Module, {Module, start_link, [Args]}, permanent, 10000,
worker, [Module]}.
y algo así como emx_nodestate (comportamiento gen_server)
init([]) ->
{ok, #state{status=starting, interested=[]}}.
funciona como un sueño ...!
Para ver cómo otras personas estructuran sus aplicaciones, ¿por qué no inicia un shell y ejecuta la barra de herramientas?
toolbar:start()
Eso le brinda una vista gráfica de una jerarquía de supervisores.Un vistazo rápido al árbol supervisor del kernel, o mnesia o yaws, le mostrará cómo es un árbol supervisor "normal".
Usted compone una aplicación de subsistemas supervisados por un supervisor de aplicaciones.Cada subsistema puede tener muchos subsistemas bajo el supervisor del subsistema (continúe aplicando el patrón de manera funcional recursiva hasta que se quede sin granularidad...)