Frage

Ich denke, es könnte eine breitere Frage des Anwendungsdesigns mit Akka geben, die hier versteckt sind, aber ich werde fragen, wie man einen Aufsichtsbaum aufstellt, bei dem ein "Kernel" oder "Top" -Spervisor Kinder beaufsichtigen könnte, die andere Supervisoren sind, welche Supervisor -Mitarbeiter sind?

War es hilfreich?

Lösung

Sie können mit einem deklarativen Supervisor auf der obersten Ebene beginnen

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

wobei Modul 1 bis 3 die nächste Ebene Ihrer Anwendungsarchitektur darstellt. Jedes Modul selbst ist ein Vorgesetzter für alle seine Kinderschauspieler und implementiert wie zum Beispiel

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

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

Sie können die Meldung "Register (Actor)" durch etwas ersetzen, das besser für Ihre Anwendung geeignet ist, und Sie möchten möglicherweise eine programmgesteuerte Supervisor -Ebene umfassen, aber im Grunde wäre dies der Ansatz, der folgt.

In der offiziellen Akka -Dokumentation finden Sie weitere Details (wie Viktor bereits kommentiert hat) Fehlertoleranz mit Scala oder Fehlertoleranz mit Java.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top