Акка Кит против Стоп против ядовитой таблетки?

Вопрос с новичком в Акке - я читаю Akka Essentials, может кто-нибудь объяснить разницу между Akka Stop/Poison Pill vs. Kill? Книга предлагает лишь небольшое объяснение: "Убить синхронно против ядовитой таблетки асинхронно". Но каким образом? Заблокирован ли поток вызывающего актера в течение этого времени? Представлены ли дочерние субъекты во время убийства, после остановки и т.д.? Пример использования одного понятия в сравнении с другим?

Большое спасибо!

Ответ 1

Оба stop и PoisonPill завершат действие актера и остановят очередь сообщений. Они заставят актера прекратить обработку сообщений, отправить стоп-вызов всем его детям, дождаться их завершения, а затем вызвать его postStop hook. Все дальнейшие сообщения отправляются в почтовый ящик мертвых букв.

Разница в том, какие сообщения обрабатываются до начала этой последовательности. В случае вызова 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

Ответ 2

Используйте PoisonPill, когда можете. Он помещается в почтовый ящик и потребляется как любое другое сообщение. Вы также можете использовать "context.stop(self)" изнутри актера.

Ответ 3

PoisonPill асинхронно останавливает актера после его завершения со всеми сообщениями, которые были получены в почтовый ящик, до PoisonPill.