Neuling Frage von Akka - Ich lese über Akka Essentials, könnte jemand bitte den Unterschied zwischen Akka Stop / Poison Pill vs. Kill erklären? Das Buch bietet nur eine kleine Erklärung: "Töten ist synchron vs. Giftpille ist asynchron." Aber wie? Wird der Thread des aufrufenden Akteurs während dieser Zeit gesperrt? Werden die Kinderdarsteller während des Tötens, der Beschwörung nach dem Stopp usw. benachrichtigt? Beispielanwendungen eines Konzepts im Vergleich zum anderen?
Danke vielmals!
context.become
?context.become
bezeichnet das Verhalten, das auf die nächste Nachricht angewendet werden soll. Dies bedeutet, dass es wirksam wird, nachdem die aktuelle Nachricht verarbeitet wurde. in dieser Hinsicht ist es ziemlich ähnlichcontext.stop(self)
.Antworten:
Beides
stop
undPoisonPill
beendet den Akteur und stoppt die Nachrichtenwarteschlange. Sie veranlassen den Akteur, die Verarbeitung von Nachrichten einzustellen, einen Stoppanruf an alle untergeordneten Elemente zu senden, auf deren Beendigung zu warten und dann seinenpostStop
Hook aufzurufen . Alle weiteren Nachrichten werden an die Mailbox für tote Briefe gesendet.Der Unterschied besteht darin, welche Nachrichten verarbeitet werden, bevor diese Sequenz beginnt. Im Falle des
stop
Anrufs wird die aktuell verarbeitete Nachricht zuerst abgeschlossen, alle anderen werden verworfen. Beim Senden von aPoisonPill
ist dies einfach eine weitere Nachricht in der Warteschlange, sodass die Sequenz beginnt, wenn diePoisonPill
empfangen wird. Alle Nachrichten, die in der Warteschlange davor stehen, werden zuerst verarbeitet.Im Gegensatz dazu veranlasst die
Kill
Nachricht den Akteur, einen zu werfen,ActorKilledException
der unter Verwendung des normalen Supervisor-Mechanismus behandelt wird. Das Verhalten hier hängt also davon ab, was Sie in Ihrer Supervisor-Strategie definiert haben. Standardmäßig wird der Schauspieler gestoppt. Das Postfach bleibt jedoch bestehen. Wenn der Akteur neu gestartet wird, werden weiterhin die alten Nachrichten angezeigt, mit Ausnahme derjenigen, die den Fehler verursacht hat.Siehe auch den Abschnitt "Stoppen eines Schauspielers", "Töten eines Schauspielers" in den Dokumenten:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
Und mehr zu Überwachungsstrategien:
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html
quelle
context.stop(self)
?Verwenden Sie PoisonPill, wann immer Sie können. Es wird in die Mailbox gestellt und wie jede andere Nachricht konsumiert. Sie können "context.stop (self)" auch innerhalb eines Schauspielers verwenden.
quelle
PoisonPill stoppt den Akteur asynchron, nachdem alle Nachrichten, die vor PoisonPill in der Mailbox empfangen wurden, fertig sind.
quelle
Sie können sowohl Schauspielerstopp als auch Giftpille verwenden, um die Verarbeitung von Schauspielern zu stoppen, und töten, um den Schauspieler in seiner Gesamtheit zu beenden. x.stop ist ein Aufruf, den Sie in der akka-Empfangsmethode tätigen. Er ersetzt den Akteurstatus erst nach dem Aufruf von postStop durch einen neuen Akteur. x! PoisonPill ist eine Methode, die Sie an den Akteur übergeben, um die Verarbeitung zu stoppen, wenn der Akteur ausgeführt wird (empfohlen). ersetzt auch den Akteurstatus nach dem Aufruf von postStop. x.kill beendet den Schauspieler und entfernt den Schauspieler im Schauspielerpfad und ersetzt den gesamten Schauspieler durch einen neuen Schauspieler.
quelle