在终结演员的消息之后终止了吗?

时间:2012-05-18 03:40:30

标签: akka

我有一个演员为一些工作产生临时儿童演员,父演员将每个演员信息存储在一个简单的地图中,当孩子报告工作完成(成功或失败)时我正在清理地图,一切都好......

当作业完成时,子actor会向父级报告,然后使用poisonPill杀死自己。为了确保我的地图不会因为孩子没有报告而包含孤儿,我也会对他们进行死亡监视......

对我而言,听起来死亡监视是一项单独的服务,因此,该消息没有理由尊重来自同一演员订购的消息。

是否可以保证从孩子发送到父母演员的消息将在终止之前到达?

1 个答案:

答案 0 :(得分:4)

演员所做的最后一件事就是执行它的postStop()生命周期钩子;返回后,它无法自行发送任何消息。其终止的系统通知(由主管在handleChildTerminated(...)中的策略所见)和DeathWatch的Terminated消息随后被发送,即它们发生在最后一条消息发送之后。因此,如果消息从postStop()发送到某个其他参与者A并且该参与者A也注册为接收Terminated消息,则将以正确的顺序接收这些消息(相同的发送者,相同的receiver => ordering)。