質問

ここに隠されているAKKAを使用したアプリケーションデザインのより広い質問があるかもしれないと思いますが、「カーネル」または「トップ」監督者が他のスーパーバイザーの監督者を監督する可能性のある監督ツリーをどのように設定するかを尋ねます。

役に立ちましたか?

解決

あなたはトップレベルの宣言的監督者から始めるかもしれません

 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)」メッセージをアプリケーションに適したものに置き換える可能性があります。また、プログラムで作成されたスーパーバイザーレイヤーにさらに及ぶことをお勧めしますが、基本的には従うべきアプローチです。

公式のAkkaドキュメントには、詳細が表示されます(Viktorがすでにコメントしているように) Scalaによるフォールトトレランス また Javaによるフォールトトレランス.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top