在akka中,当一个actor停止时会调用poststop方法。
也可以配置手表 主管,当演员被终止时,在主管内收到终止的消息。
使用postStop而不是Terminated是否有任何优势?我能看到的唯一区别 是当一个actor停止时调用postStop(在actor中),当actor被终止时调用Terminated(在supervisor中)。
当一个演员被停止时它是否也被终止了?
答案 0 :(得分:7)
首先,postStop()
从preRestart()
默认实现同一个actor调用(参见here),而Terminated
消息仅在演员真的停了,而不是刚刚重启。因此,默认设置postStop()
可能会被调用的次数超过Terminated
消息的发送次数。
但主要的想法是需要post*
和pre*
钩子来清理演员自己的状态,并且Terminated
消息(实际上整个监视系统)旨在协调多个演员的行为和状态。他们的目的是不同的,虽然您可以发送自定义Terminated
- 来自postStop()
钩子的消息,但您真的不应该这样做。
答案 1 :(得分:3)
postStop
是演员本身内部的回调。您可以使用它来清除actor内部的状态,或者根据状态触发更多消息。
观察Terminated
允许外部演员在另一个演员死亡时得到通知。它不依赖终止的演员本身做任何事情。