1

アプリケーション内でスーパーバイザーをカスケードすることは可能ですか?

たとえばsup1、スーパーバイザーを作成する子プロセスを生成するスーパーバイザーsup2?

4

3 に答える 3

7

おそらく、子供をスーパーバイザーとして追加したいと思うでしょう。

スーパーバイザの子の childspec へのエントリです。子の「タイプ」は「スーパーバイザー」に設定できます。

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

おそらく、スーパバイザ自体を開始する子を介してそれを行うこともできますが、少なくともエレガントではなく、何をしているのかがはっきりしません。

HTH、h。

于 2009-12-02T23:22:05.693 に答える
3

はい、スーパーバイザーの子としてスーパーバイザーを簡単に追加できます。または、混ぜ合わせてください。私は通常、次のようなことをします:

(私のトップレベルのスーパーバイザーで)

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

そして、emx_sup_data (動作スーパーバイザー) のようなものには以下が含まれます。

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

emx_nodestate (behaviour gen_server) のようなもの

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

夢のように働く...!

于 2009-12-03T00:30:31.760 に答える
2

他の人々がアプリをどのように構成しているかを確認するには、シェルを起動してツールバーを実行しないでください。

toolbar:start()

これにより、スーパーバイザー階層のグラフィカルビューが得られます。カーネルスーパーバイザツリー、またはmnesiaまたはyawsをざっと見ると、「通常の」スーパーバイザツリーがどのように見えるかがわかります。

アプリケーションスーパーバイザーによって監視されるサブシステムのアプリケーションを作成します。各サブシステムは、サブシステムスーパーバイザーの下にある多くのサブサブシステムにすることができます(粒度がなくなるまで、パターンを再帰的に機能的に適用し続けます...)

于 2009-12-03T11:54:42.610 に答える