AKKA Supervisor Managing Supervisors
-
28-10-2019 - |
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?
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.