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

blu*_*sky 3 java scala akka

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

还可以在监督者上配置监视,以便当演员终止时,在监督者内接收终止消息.

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

当一个演员停下来的时候它还会被终止吗?

Vla*_*eev 7

首先,postStop()preRestart()同一个actor的默认实现中调用(参见此处),而Terminated只有当actor真正停止时才会将消息发送到父级,而不是刚刚重新启动时.因此,默认设置postStop()可以被调用的次数多于Terminated发送消息的次数.

但主要的想法是,post*pre*挂钩需要清理演员的自己的状态,并且Terminated消息(整个观测系统,其实)旨在协调多个参与者的行为和状态.他们的目的是不同的,虽然你可以TerminatedpostStop()钩子发送类似自定义的消息,但你真的不应该这样做.