Akka Stop Kill PoisonPill 区别

Posted 云飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Akka Stop Kill PoisonPill 区别相关的知识,希望对你有一定的参考价值。

Both stop and PoisonPill will terminate the actor and stop the message queue. They will cause the actor to cease processing messages, send a stop call to all its children, wait for them to terminate, then call its postStop hook. All further messages are sent to the dead letters mailbox.

The difference is in which messages get processed before this sequence starts. In the case of the stop call, the message currently being processed is completed first, with all others discarded. When sending a PoisonPill, this is simply another message in the queue, so the sequence will start when the PoisonPill is received. All messages that are ahead of it in the queue will be processed first.

By contrast, the Kill message causes the actor to throw an ActorKilledException which gets handled using the normal supervisor mechanism. So the behaviour here depends on what you‘ve defined in your supervisor strategy. The default is to stop the actor. But the mailbox persists, so when the actor restarts it will still have the old messages except for the one that caused the failure.

Also see the ‘Stopping an Actor‘, ‘Killing an Actor‘ section in the docs:

http://doc.akka.io/docs/akka/snapshot/scala/actors.html

And more on supervision strategies:

http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html

以上是关于Akka Stop Kill PoisonPill 区别的主要内容,如果未能解决你的问题,请参考以下文章

docker stop 或者 docker kill 不能停止容器

docker stop 或者 docker kill 不能停止容器

快速强制kill goldengate异常进程

Akka并发编程——第八节:Actor模型

akka设计模式系列-actor锚定

linux 中 kill() 与 signal() 函数