开发者

Erlang: cascaded supervisors?

Is it possible to cascade supervisors inside an application?

E.g. supervisor sup1 spawning a child pr开发者_JAVA技巧ocess which creates a supervisor sup2 ?


You probably want to add the child as supervisor.

It is an entry in the childspec of a child of a supervisor. The "type" of the child can be set to "supervisor":

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

Probably you can do it via the child starting a supervisor itself too but it is at least less elegant and it is less evident what you are doing.

HTH, h.


Yes, you can simply add supervisors as children of a supervisor. Or mix and match. I do something like this usually:

(in my top level supervisor)

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

And then something like emx_sup_data (behaviour supervisor) contains:

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

and something like emx_nodestate (behaviour gen_server)

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

Works like a dream...!


To see how other folks structure their apps why dont you fire up a shell and run the toolbar:

toolbar:start()

That gives you a graphical view of a supervisor heirarchy. A quick look at the kernel supervisor tree, or mnesia or yaws, will show you what a 'normal' supervisor tree looks like.

You compose an application of sub-systems supervised by an application supervisor. Each sub-system can be many sub-sub-systems under the sub-system supervisor (continue applying pattern in recursive functional manner until you run out of granularity...)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜