И то stopи другое PoisonPillпрервет актера и остановит очередь сообщений. Они заставят субъекта прекратить обработку сообщений, отправить стоп-вызов всем его дочерним элементам, дождаться их завершения, а затем вызвать свой postStopхук. Все дальнейшие сообщения отправляются на почтовый ящик мертвых писем.
Разница в том, какие сообщения обрабатываются до начала этой последовательности. В случае stopвызова сообщение, обрабатываемое в данный момент, завершается первым, а все остальные отбрасываются. При отправке PoisonPill, это просто другое сообщение в очереди, поэтому последовательность начнется, когда PoisonPillбудет получено. Все сообщения, которые стоят перед ним в очереди, будут обработаны первыми.
Напротив, Killсообщение заставляет актера выбросить объект, ActorKilledExceptionкоторый обрабатывается с использованием обычного механизма супервизора. Таким образом, поведение здесь зависит от того, что вы определили в своей стратегии супервизора. По умолчанию актер останавливается. Но почтовый ящик сохраняется, поэтому при перезапуске субъекта все равно будут храниться старые сообщения, кроме того, которое вызвало сбой.
Также см. Раздел «Остановка актера», «Убить актера» в документации:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
И еще о стратегиях надзора:
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html