Akka的新手问题-我正在阅读Akka要点,有人能解释一下Akka停止/毒丸与杀死之间的区别吗?这本书只提供了一个小的解释“杀死是同步的,毒丸是异步的。”但是以什么方式呢?调用演员线程在这段时间锁定吗?儿童演员在杀死期间被通知了吗,停止后被唤醒了吗,一个概念与另一个概念的使用示例?非常感谢!
bsxbgnwa1#
stop和PoisonPill都将终止执行元并停止消息队列。它们将使执行元停止处理消息,向其所有子代发送停止调用,等待它们终止,然后调用其postStop挂钩。所有后续消息都将发送到死信邮箱。不同之处在于在这个序列开始之前处理哪些消息。在stop调用的情况下,当前正在处理的消息首先完成,所有其他消息被丢弃。当发送PoisonPill时,这只是队列中的另一个消息,因此序列将在收到PoisonPill时开始,在队列中位于它前面的所有消息都将首先被处理。相比之下,Kill消息会导致参与者抛出ActorKilledException,并使用正常的管理器机制进行处理。因此此处的行为取决于您在管理器策略中定义的内容。默认情况下是停止参与者。但邮箱会持续存在,因此当参与者重新启动时,除了导致失败的消息之外,它仍会包含旧消息。另请参见文档中的“阻止演员”、“杀死演员”部分:http://doc.akka.io/docs/akka/snapshot/scala/actors.html关于监管策略的更多信息:http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html
stop
PoisonPill
postStop
Kill
ActorKilledException
vptzau2j2#
只要有可能就使用PoisonPill。它会放在邮箱中,像其他邮件一样使用。您也可以在角色中使用“context.stop(self)”。
nhaq1z213#
PoisonPill异步停止演员后,它完成了所有的消息收到邮箱,之前PoisonPill。
ukxgm1gy4#
您可以使用actor stop和poison pill来停止对actor的处理,而kill则可以完全终止actor。x.stop是您在akka receive方法中进行的调用,在调用postStop之后,我只会用新的参与者替换参与者状态。x!PoisonPill是一个在参与者运行时传递给参与者以停止处理的方法(建议使用)。也会在呼叫postStop之后取代执行元状态。x.kill会终止执行元,并移除执行元路径中的执行元,并以新的执行元取代整个执行元。
4条答案
按热度按时间bsxbgnwa1#
stop
和PoisonPill
都将终止执行元并停止消息队列。它们将使执行元停止处理消息,向其所有子代发送停止调用,等待它们终止,然后调用其postStop
挂钩。所有后续消息都将发送到死信邮箱。不同之处在于在这个序列开始之前处理哪些消息。在
stop
调用的情况下,当前正在处理的消息首先完成,所有其他消息被丢弃。当发送PoisonPill
时,这只是队列中的另一个消息,因此序列将在收到PoisonPill
时开始,在队列中位于它前面的所有消息都将首先被处理。相比之下,
Kill
消息会导致参与者抛出ActorKilledException
,并使用正常的管理器机制进行处理。因此此处的行为取决于您在管理器策略中定义的内容。默认情况下是停止参与者。但邮箱会持续存在,因此当参与者重新启动时,除了导致失败的消息之外,它仍会包含旧消息。另请参见文档中的“阻止演员”、“杀死演员”部分:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
关于监管策略的更多信息:
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html
vptzau2j2#
只要有可能就使用PoisonPill。它会放在邮箱中,像其他邮件一样使用。您也可以在角色中使用“context.stop(self)”。
nhaq1z213#
PoisonPill异步停止演员后,它完成了所有的消息收到邮箱,之前PoisonPill。
ukxgm1gy4#
您可以使用actor stop和poison pill来停止对actor的处理,而kill则可以完全终止actor。x.stop是您在akka receive方法中进行的调用,在调用postStop之后,我只会用新的参与者替换参与者状态。x!PoisonPill是一个在参与者运行时传递给参与者以停止处理的方法(建议使用)。也会在呼叫postStop之后取代执行元状态。x.kill会终止执行元,并移除执行元路径中的执行元,并以新的执行元取代整个执行元。