传播Akka的PoisonPill消息

时间:2018-07-16 18:40:35

标签: java akka

Akka的PoisonPill是传播给演员的孩子,还是只是在不处理其余消息的情况下就停止了孩子? Akka文档尚不清楚,并且在StackOverflow中有一个类似问题的答案,其中引用了旧代码,该代码表明子级已停止,但对我而言却没有意义:为什么演员能够在处理之前轻松地处理消息毒丸,但它的孩子不是。

1 个答案:

答案 0 :(得分:1)

PoisonPill不会传播到子级。换句话说,孩子们被阻止了,而不是“中毒了”。父级处理PoisonPill后,它将停止,然后停止其子级。来自documentation

  

...停止父级Actor还将递归停止该父级创建的所有子级Actor。

幼稚的方法是先向孩子发送PoisonPill,再向父母发送PoisonPill。但是,actor停止是异步发生的,因此无法保证孩子在由于父级的停止而停止之前,已经处理了各自邮箱中的邮件(直到PoisonPill)。

要更好地控制演员的孩子如何“死亡”,请查看文档中提到的pattern