Question

Est-il possible de cascade superviseurs dans une application?

par exemple. superviseur sup1 fraie un processus enfant qui crée un sup2 superviseur?

Était-ce utile?

La solution

Vous voulez probablement ajouter l'enfant en tant que superviseur.

Il est une entrée dans le childspec d'un enfant d'un superviseur. Le « type » de l'enfant peut être réglé à « superviseur »:

http://www.erlang.org/doc/design_principles/sup_princ .html # spec

Probablement, vous pouvez le faire par l'enfant à partir d'un superviseur lui-même aussi, mais il est au moins moins élégant et il est moins évident ce que vous faites.

HTH, h.

Autres conseils

Oui, vous pouvez simplement ajouter les superviseurs comme les enfants d'un superviseur. Ou mélanger et assortir. Je fais quelque chose comme ça habituellement:

(dans mon superviseur de niveau supérieur)

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]}.

Et puis quelque chose comme emx_sup_data (superviseur de comportement) contient:

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]}.

et quelque chose comme emx_nodestate (comportement gen_server)

init([]) ->
    {ok, #state{status=starting, interested=[]}}.

fonctionne comme un rêve ...!

Pour voir comment d'autres gens structurent leurs applications pourquoi ne pas vous lancez un shell et exécutez la barre d'outils:

toolbar:start()

Cela vous donne une vue graphique d'un superviseur heirarchy. Un coup d'œil sur l'arbre superviseur du noyau, ou mnesia ou pian, va vous montrer ce qu'est un arbre superviseur « normal » ressemble.

Vous rédigez une demande de sous-systèmes supervisés par un superviseur d'application. Chaque sous-système peut être beaucoup de sous-sous-systèmes dans le cadre du superviseur sous-système (continuer à appliquer modèle de manière fonctionnelle récursive jusqu'à ce que vous manquez de granularité ...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top