Erlang: supervisores em cascata?
-
11-09-2019 - |
Pergunta
É possível supervisores cascata dentro de um aplicativo?
por exemplo. sup1
supervisor gerando um processo filho que cria um sup2
supervisor?
Solução
Você provavelmente vai querer adicionar a criança como supervisor.
É uma entrada no childspec de uma criança de um supervisor. O "tipo" de que a criança pode ser definido como "supervisor":
http://www.erlang.org/doc/design_principles/sup_princ .html # especificação
Provavelmente você pode fazê-lo via a criança começar um supervisor em si também, mas pelo menos é menos elegante e é menos evidente que você está fazendo.
HTH, h.
Outras dicas
Sim, você pode simplesmente adicionar supervisores como filhos de um supervisor. Ou misturar e combinar. I fazer algo como isto normalmente:
(no meu supervisor nível superior)
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]}.
E então algo como emx_sup_data (supervisor comportamento) contém:
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]}.
e algo como emx_nodestate (gen_server comportamento)
init([]) ->
{ok, #state{status=starting, interested=[]}}.
funciona como um sonho ...!
Para ver como outras pessoas estruturar seus aplicativos por que você não disparar um shell e execute a barra de ferramentas:
toolbar:start()
Isso dá-lhe uma visão gráfica de uma hierarquia supervisor. Um rápido olhar para a árvore supervisor kernel, ou mnesia ou bouba, vai mostrar o que uma aparência 'normais' de árvores supervisor como.
Você compor uma aplicação de sub-sistemas supervisionado por um supervisor aplicação. Cada sub-sistema pode ser muitas sub-sub-sistemas sob o supervisor sub-sistema (continuar a aplicar padrão em forma funcional recursiva até que você correr para fora de granularidade ...)