Akka - Senden Sie die "Breaking" -Nachricht erneut

Im offiziellenakka 2.0.4 docs es sagt:

Ein Akteurneustart ersetzt nur das eigentliche Akteurobjekt. Der Inhalt des Postfachs bleibt vom Neustart unberührt, sodass die Verarbeitung der Nachrichten fortgesetzt wird, nachdem der Hook postRestart zurückgegeben wurde. Die Nachricht, die die Ausnahme ausgelöst hat, wird nicht erneut empfangen. Jede Nachricht, die an einen Akteur gesendet wird, während dieser neu gestartet wird, wird wie gewohnt in seine Mailbox eingereiht.

Angenommen, ich habe eine Nachricht, die dazu geführt hat, dass mein Schauspieler neu gestartet wurde. Es befindet sich nicht mehr im Postfach und wird daher nicht von dem Schauspieler verarbeitet, der seinen Platz einnimmt. Wenn ich möchte, dass diese Nachricht trotzdem vom Akteur verarbeitet wird (vorausgesetzt, die Reihenfolge spielt in diesem Fall keine Rolle), wäre es eine schlechte Idee, wenn der Akteur die Nachricht beim Neustart an sich selbst sendet?

Ein paar (Pseudo-) Codes, die zeigen, was ich meine:

class ResendingActor extends Actor {
  var curMessage: Option[MyMessage] = None
  def receive = {
    case MyMessage(x) => {
      curMessage = Some(MyMessage(x))
      /* processing */
      curMessage = None
    }
  }
  override def preRestart(reason: Throwable, message: Option[Any]) {
    curMessage match {
      case Some(x) => self ! x
      case None => ;
    }
  }
}

Auf diese Weise wird die Nachricht, die vom Akteur vor dem Neustart nicht verarbeitet wurde, an das Ende der Warteschlange für den neuen Akteur verschoben.

Meine Frage lautet also: Gibt es einen Grund, warum ich das nicht tun sollte?

Das einzige, was mir einfällt, ist, dass die Nachricht, wenn sie aus irgendeinem Grund falsch formatiert ist, das System niemals verlässt und den Schauspieler regelmäßig neu startet ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage