在Akka的poststop和终止之间的区别?

时间:2014-05-12 12:48:39

标签: java scala akka

在akka中,当一个actor停止时会调用poststop方法。

也可以配置手表 主管,当演员被终止时,在主管内收到终止的消息。

使用postStop而不是Terminated是否有任何优势?我能看到的唯一区别 是当一个actor停止时调用postStop(在actor中),当actor被终止时调用Terminated(在supervisor中)。

当一个演员被停止时它是否也被终止了?

2 个答案:

答案 0 :(得分:7)

首先,postStop()preRestart()默认实现同一个actor调用(参见here),而Terminated消息仅在演员真的停了,而不是刚刚重启。因此,默认设置postStop()可能会被调用的次数超过Terminated消息的发送次数。

但主要的想法是需要post*pre*钩子来清理演员自己的状态,并且Terminated消息(实际上整个监视系统)旨在协调多个演员的行为和状态。他们的目的是不同的,虽然您可以发送自定义Terminated - 来自postStop()钩子的消息,但您真的不应该这样做。

答案 1 :(得分:3)

postStop是演员本身内部的回调。您可以使用它来清除actor内部的状态,或者根据状态触发更多消息。

观察Terminated允许外部演员在另一个演员死亡时得到通知。它不依赖终止的演员本身做任何事情。