2016-05-01 2 views
0

Wie kann ich den actorRef oder den Namen des fehlerhaften Knotens abrufen? Ich muss den Knoten neu starten, wenn die Ausnahme einmal auftritt. Wenn die Ausnahme> 1 auftritt, muss ich fortfahren.Wie erhalte ich den aktorRef des scheiternden Schauspielers in einem OneForOneStrategy Setup?

Mein Gedanke war, den Supervisor zu speichern, wie oft ein bestimmter Knoten die Ausnahme hatte - aber ich kann nicht herausfinden, welcher Knoten ausgefallen ist. Vielleicht ist der Ansatz schlecht.

x wäre die Anzahl der Male, an denen der fehlerhafte Knoten eine Ausnahme hatte.

OneForOneStrategy() { 
    case _: FileNotFoundException => 
     // Need to know how many times node n has had this exception and restart/resume as required. 
     if(x == 1) 
      Restart 
     else 
      Resume 
    case _: Exception => Stop 
} 

Antwort

0

Sie konnten die FileNotFoundException fangen und einen CustomException werfen, die ein ActorRef Feld der Ausnahme Darsteller (Selbst-) gesetzt hat. Dann fangen Sie in Ihrem OneForOne das CustomException, das das Feld ActorRef für den Problem-Aktor enthält. Jetzt haben Sie also einen Verweis auf den fehlerhaften Akteur, dann überprüfen Sie die Anzahl der Ausnahmen, wie Sie es in Ihrem Supervisor beschrieben haben, und führen Sie den Aufruf aus, ob Sie neu starten/fortsetzen möchten.

1

Tatsächlich können Sie in Supervisor Decider die ActorRef des fehlgeschlagenen Kindes über sender() -Methode erhalten.