Beides stop
und PoisonPill
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 seinen postStop
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 a PoisonPill
ist dies einfach eine weitere Nachricht in der Warteschlange, sodass die Sequenz beginnt, wenn die PoisonPill
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