4

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

工作完成后,子actor向父actor报告,然后使用毒药杀死自己。为了确保我的地图不会因为孩子不报告而包含孤儿,我还对他们进行了死亡观察......

对我来说,死亡守望听起来像是一个单独的服务,因此,消息没有理由尊重来自同一演员的消息排序事情。

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

4

1 回答 1

4

Actor 做的最后一件事是执行它的postStop()生命周期钩子;返回后它不能自行发送任何消息。其终止的系统通知(如 中主管的策略所见handleChildTerminated(...))和TerminatedDeathWatch 的消息是在之后发送的,即它们发生在最后一个消息发送之后。因此,如果一条消息从某个其他参与者 A 发送,postStop()并且该参与者 A 也注册用于接收该Terminated消息,那么这些消息将以正确的顺序接收(相同的发送者,相同的接收者 => 排序)。

于 2012-05-21T06:47:54.640 回答