Beides stopund PoisonPillbeendet 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 postStopHook 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 stopAnrufs wird die aktuell verarbeitete Nachricht zuerst abgeschlossen, alle anderen werden verworfen. Beim Senden von a PoisonPillist dies einfach eine weitere Nachricht in der Warteschlange, sodass die Sequenz beginnt, wenn die PoisonPillempfangen wird. Alle Nachrichten, die in der Warteschlange davor stehen, werden zuerst verarbeitet.
Im Gegensatz dazu veranlasst die KillNachricht den Akteur, einen zu werfen, ActorKilledExceptionder 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