阿卡杀死与停止与毒丸?
阿卡的新手问题 – 我正在阅读阿卡基础知识,有人可以解释阿卡停止/毒丸与杀死之间的区别? 这本书只提供了一个小的解释“杀死是同步与毒药是asynchronous的”。 但是以什么方式? 调用actor在这段时间内是否locking? 在杀人期间通知儿童的演员,停止煽动等? 一个概念与另一个概念的使用范例?
非常感谢!
stop
和PoisonPill
将终止actor并停止消息队列。 他们将导致演员停止处理消息,发送停止呼叫给所有的孩子,等待他们终止,然后调用其postStop
钩子。 所有进一步的消息被发送到死信邮箱。
区别在于在这个序列开始之前哪些消息被处理。 在stop
呼叫的情况下,当前正在处理的消息首先完成,其他所有消息都被丢弃。 当发送PoisonPill
,这只是队列中的另一个消息,所以当PoisonPill
被接收时,序列将开始。 所有在队列中的消息将首先被处理。
相比之下, Kill
消息则会导致actor抛出一个ActorKilledException
,该exception通过普通的pipe理器机制来处理。 所以这里的行为取决于你在主pipe策略中定义的内容。 默认是停止演员。 但是邮箱仍然存在,所以当这个actor重新启动的时候,除了那个引起失败的邮件之外,它仍然会有旧的邮件。
另请参阅文档中的“停止演员”,“杀死演员”部分:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
更多关于监督策略:
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html
在PoisonPill之前,PoisonPill完成所有收到邮箱的邮件后,asynchronous停止该actor。