Pergunta

É possível supervisores cascata dentro de um aplicativo?

por exemplo. sup1 supervisor gerando um processo filho que cria um sup2 supervisor?

Foi útil?

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 ...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top