Akka Kill vs. Stop vs. Poison Pill?

Lal*_*lin 211 scala akka

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

非常感谢!

rs_*_*atl 326

双方stopPoisonPill会终止演员和停止消息队列.它们将导致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

  • 除非使用非默认管理程序策略,否则Kill消息不会导致actor使用普通管理程序机制重新启动,因为ActorKilledException解析为Stop,而不是Restart. (15认同)
  • 优秀答案谢谢,应该贴在Akka教程上! (4认同)