我和演员一起玩。到目前为止,我的演员都没有状态所以我一直在创建一次性演员(使用system.actorOf或context.actorOf),并且在发送消息后再也不会引用ActorRef。这对我的用例来说是一个好习惯吗?一旦我的演员完成处理事件,我应该使用context.stop()
手动杀死它们吗?
由于
答案 0 :(得分:1)
我的问题并不完全清楚,但假设你的意图是你的一次性演员正在做一些工作,然后将结果发送给原来的来电者,之后他们什么都没有留下来他们应该在发送回复后向他们自己发送一条停止信息:
...do work...
...assemble response...
caller ! response
context.stop(self)
或者,特别是如果演员的标准流程有可能失败,您可以让演员通过调度程序设置PoisonPill
对自己的调用(或者产生父级可以执行此操作)。例如:
import scala.concurrent.duration.FiniteDuration
class SingleJobActor(max_time_to_live: FiniteDuration) extends Actor {
override def preStart {
import context.dispatcher
context.system.scheduler.scheduleOnce(max_time_to_live, self, PoisonPill)
}
...rest of actor...
}