如果指定的actor已经停止,是否会发送使用scheduleOnce安排的消息?

时间:2015-02-26 20:17:39

标签: scala akka

我使用scheduleOnce安排了一条消息:

val cancellableMessage = system.schedule.scheduleOnce(500 milliseconds, self, "hi")

然后我运行一个方法,最后,它执行此操作:

cancellableMessage.cancel()
context.stop(self)

我已经看到有关安排重复发送的邮件的问题,例如Akka Scala actor scheduled message does not appear to fire,其中记录了一个死信,因为该演员被停止了。但这些都是反复出现的信息。如果我以上述方式使用scheduleOnce,我还会看到一封死信吗? Akka是否能够认识到,因为我想要向self发送消息,之后我停止了self,它是否会传递消息?

我担心的是,在我能正确取消发送之前500毫秒就会发生(因为有一个特殊点,我知道,无论如何,我可以取消它),但是在我进入之后取消它的方法,导致死信。不是灾难,但肯定是不愉快的。

1 个答案:

答案 0 :(得分:3)

我相信由于调度程序是在ActorSystem级别完成的,因此它不会检查邮件的收件人。您可以想象您的调度程序将self ! "hi"包装在Runnable中,只需将运行程序提交给执行程序,它就会盲目地执行它。

因此,即使您的收件人已经死亡,该邮件也会被发送到相应的ActorRef并最终以DeadLetter结尾。