2016-07-22 5 views
2

Wenn der Aktor fehlschlägt, muss ich die Ursache des Fehlers an einen anderen Akteur senden.Ursache der Aktor-Beendigung oder wie man Fehler behandelt

Ich weiß, es gibt Überwachungsstrategien und ich benutze sie. Das Problem ist - ich kann den richtigen Ort für solche Fehlerberichte nicht finden. Ich habe versucht, Schauspieler zu sehen, aber beendeten Nachricht bietet keinen Grund für die Kündigung. Derzeit hinzugefügt i Fehler in Decider Handhabung:

override def supervisorStrategy: SupervisorStrategy = 
    OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = Duration(1, TimeUnit.SECONDS), loggingEnabled = true) { 
     case e: Exception => 
     onActorError(sender(), e) 
     Stop 
    } 

Aber ich denke, dass es nicht eine gute Zeit und Ort, dies zu tun, „Decider“ sollte Strategie zurückkehren, und nicht implizit etwas anderes zu tun.

Die Frage ist also: Gibt es einen geeigneten Ort, um Akteur Ausnahmen zu fangen und etwas dagegen zu tun?

Antwort

1

postRestart Methode des überwachten Akteurs scheint wie ein guter Ort, um die Postmortem-Protokollierung zu tun. Von documentation:

Die postRestart Methode des neuen Akteur wird mit Ausnahme aufgerufen, die den Neustart verursacht. Standardmäßig wird der preStart aufgerufen, genau wie im normalen Startfall .

+0

Der Aktor wird gestoppt, nicht neu gestartet. So postRestart wird wahrscheinlich nie aufgerufen werden –

+0

postStop sollte nach dem stop() unabhängig aufgerufen werden. –

+0

ja, aber PostStop hat keine Argumente ... So gibt es keine Möglichkeit, die Ursache des Stopps an diesem Punkt –

Verwandte Themen