首页 文章

Akka Kill vs. Stop vs. Poison Pill?

提问于
浏览
203

Akka的新手问题 - 我正在阅读Akka Essentials,有人可以解释一下Akka Stop / Poison Pill与Kill之间的区别吗?这本书只提供了一个小小的解释“杀死同步与毒药是异步的” . 但是以什么方式?调用actor是否在此期间锁定线程?儿童演员是否在杀人,后停止等情况下被通知?一个概念与另一个概念的使用示例?

非常感谢!

3 回答

  • -1

    stopPoisonPill 都将终止actor并停止消息队列 . 它们将导致actor停止处理消息,向其所有子节点发送停止调用,等待它们终止,然后调用它的 postStop 钩子 . 所有其他消息都将发送到死信邮箱 .

    不同之处在于在此序列开始之前处理消息 . 在 stop 调用的情况下,首先完成当前正在处理的消息,并丢弃所有其他消息 . 发送 PoisonPill 时,这只是队列中的另一条消息,因此序列将在收到 PoisonPill 时开始 . 将首先处理队列中前面的所有消息 .

    相比之下, Kill 消息导致actor抛出 ActorKilledException ,使用普通的管理程序机制处理它 . 因此,此处的行为取决于您在主管策略中定义的内容 . 默认是停止actor . 但是邮箱仍然存在,因此当actor重新启动时,它仍然会有旧消息,除了导致失败的消息 .

    另请参阅文档中的“停止演员”,“杀死演员”部分:

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

    更多关于监管策略:

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

  • 1

    尽可能使用PoisonPill . 它被放在邮箱上,像任何其他消息一样被消费 . 您还可以在actor中使用“context.stop(self)” .

  • 316

    在PoisonPill之前,PoisonPill在完成所有收到邮箱的邮件后,会异步停止该角色 .

相关问题