2

ここに隠された Akka を使用したアプリケーション設計に関するより広範な問題があると思いますが、「カーネル」または「トップ」スーパーバイザーが他のスーパーバイザーである子を監督するスーパーバイザー ツリーをどのようにセットアップするかをお尋ねします。

4

1 に答える 1

1

最上位の宣言型スーパーバイザーから始めることができます

 val kernel = Supervisor(
     SupervisorConfig(
         OneForOneStrategy(List(classOf[Exception]), 3, 1000),
         Supervise(
             actorOf[Module1],
             Permanent) ::
         Supervise(
             actorOf[Module2],
             Permanent) ::
         Supervise(
             actorOf[Module3],
             Permanent) ::
         Nil
     )
 )

モジュール 1 から 3 は、アプリケーション アーキテクチャの次のレベルを表します。各モジュール自体は、すべての子アクターのスーパーバイザーであり、次のように実装されています

class Module1 extends Actor {
   self.faultHandler = OneForOneStrategy(List(classOf[Throwable]), 5, 5000)

   def receive = {
       case Register(actor) =>
       self.link(actor)
   }
}

「Register(actor)」メッセージをアプリケーションにより適したものに置き換えることができます。また、プログラムで作成されたスーパーバイザー層をさらに拡張することもできますが、基本的にはそれに従うアプローチになります。

詳細については、(Viktor が既にコメントしているように) akka の公式ドキュメントで、Scala によるフォールト トレランスまたはJava によるフォールト トレランスを参照してください。

于 2011-06-06T10:33:47.093 に答える