Ich habe zwei Schauspieler:Akka: Wie kann ich das Scheitern eines Schauspielers in einem anderen (nicht kindlichen) Schauspieler feststellen?
Process die einige Prozesse im System behandelt (zB Anmeldung Benutzer, Einkauf, etc.)
Notifier - den Benutzer benachrichtigen soll, wenn ein Fehler in Process aufgetreten . Ich muss einen Fehler des ProcessManager-Aktors abfangen (er war fehlgeschlagen und wurde aus welchem Grund auch immer gestoppt, z. B. weil ActorInitializationException oder max neustart time erreicht wurde und der Prozessmanager-Aktor gestoppt wurde).
class ProcessManager extends Actor {
override def receive: Receive = {
...
}
}
class Notifier extends Actor {
override def receive: Receive = {
PROCESS MANAGER ACTOR FAILED AND STOPPED =>
// Here I need to catch failure of ProcessManager actor
// (it was failed and stopped for what ever
// reason, for example, because of ActorInitializationException
// or max restart time reached and Process manager actor was stopped).
//
// Then do some stuff, for example, send message to the client via web socket.
}
}
class MyController @Inject() (cc: ControllerComponents, actorSystem: ActorSystem)
(implicit exec: ExecutionContext) extends AbstractController(cc) {
// I need to catch failure of processManager in this actor.
val notifier = actorSystem.actorOf(Props(classOf[Notifier]))
def registerUser = Action.async {
// Actor may be stopped because of ActorInitializationException here
val processManager = actorSystem.actorOf(Props(classOf[ProcessManager]))
...
// OR it may be stopped here for any reason.
processManager ! "some message which will fail and stop pm actor"
Future.successfull(Ok("Thanks."))
}
}
Wie kann ich fangen Kündigung (wegen Fehler) von Process Schauspieler innen Notifier Schauspieler?
BEARBEITEN Lassen Sie mich den Kontext meines Problems erklären.
Ich bin PM-Schauspieler in Play-Controller erstellen und senden Sie die Nachricht an sie (Tell) und ich gebe Ok Antwort sofort an den Benutzer zurück. PM-Akteur erstellt einen anderen untergeordneten Akteur und während der Erstellung wird ActorInitializationException ausgelöst. Ich muss den Benutzer benachrichtigen (via Web-Socket, mit Notifier-Akteur), dass etwas schief gelaufen ist.
lassen Sie mich den Kontext meines Problems erklären. Ich erstelle PM-Darsteller im Play-Controller und sende die Nachricht an ihn (Tell) und ich gebe Ok-Antwort sofort an den Benutzer zurück. PM-Akteur erstellt einen anderen untergeordneten Akteur und während der Erstellung wird ActorInitializationException ausgelöst. Ich muss den Benutzer benachrichtigen (via Web-Socket, mit Notifier-Akteur), dass etwas schief gelaufen ist. Diese Lösung löst dieses Problem nicht, aber danke. – Teimuraz
@ moreo: Aktualisiert. – chunjef