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