Akka 的新手问题 - 我正在阅读 Akka Essentials,有人可以解释 Akka Stop/Poison Pill 与 Kill 之间的区别吗?这本书只提供了一个小解释“杀死是同步的,而毒丸是异步的”。但以什么方式?在此期间调用参与者线程是否锁定?在杀戮、停止后诱发等过程中是否通知了儿童演员?一个概念与另一个概念的示例用法?
非常感谢!
两者都stop将PoisonPill终止参与者并停止消息队列。它们会导致actor停止处理消息,向它的所有子节点发送停止调用,等待它们终止,然后调用它的postStop钩子。所有进一步的消息都发送到死信邮箱。
stop
PoisonPill
postStop
不同之处在于在此序列开始之前处理哪些消息。在stop调用的情况下,当前正在处理的消息首先完成,所有其他消息都被丢弃。发送 aPoisonPill时,这只是队列中的另一条消息,因此序列将在PoisonPill收到时开始。队列中所有在它前面的消息将首先被处理。
相比之下,Kill消息会导致参与者抛出一个ActorKilledException使用普通监督机制处理的消息。因此,这里的行为取决于您在主管策略中定义的内容。默认是停止actor。但是邮箱仍然存在,所以当actor重新启动时,除了导致失败的消息之外,它仍然会保留旧消息。
Kill
ActorKilledException
另请参阅文档中的“停止演员”、“杀死演员”部分:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
以及更多关于监管策略的信息:
http://doc.akka.io/docs/akka/snapshot/scala/fault- tolerance.html