アプリケーション内でスーパーバイザーをカスケードすることは可能ですか?
たとえばsup1
、スーパーバイザーを作成する子プロセスを生成するスーパーバイザーsup2
?
アプリケーション内でスーパーバイザーをカスケードすることは可能ですか?
たとえばsup1
、スーパーバイザーを作成する子プロセスを生成するスーパーバイザーsup2
?
おそらく、子供をスーパーバイザーとして追加したいと思うでしょう。
スーパーバイザの子の childspec へのエントリです。子の「タイプ」は「スーパーバイザー」に設定できます。
http://www.erlang.org/doc/design_principles/sup_princ.html#spec
おそらく、スーパバイザ自体を開始する子を介してそれを行うこともできますが、少なくともエレガントではなく、何をしているのかがはっきりしません。
HTH、h。
はい、スーパーバイザーの子としてスーパーバイザーを簡単に追加できます。または、混ぜ合わせてください。私は通常、次のようなことをします:
(私のトップレベルのスーパーバイザーで)
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=[]}}.
夢のように働く...!
他の人々がアプリをどのように構成しているかを確認するには、シェルを起動してツールバーを実行しないでください。
toolbar:start()
これにより、スーパーバイザー階層のグラフィカルビューが得られます。カーネルスーパーバイザツリー、またはmnesiaまたはyawsをざっと見ると、「通常の」スーパーバイザツリーがどのように見えるかがわかります。
アプリケーションスーパーバイザーによって監視されるサブシステムのアプリケーションを作成します。各サブシステムは、サブシステムスーパーバイザーの下にある多くのサブサブシステムにすることができます(粒度がなくなるまで、パターンを再帰的に機能的に適用し続けます...)