我使用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毫秒就会发生(因为有一个特殊点,我知道,无论如何,我可以取消它),但是在我进入之后取消它的方法,导致死信。不是灾难,但肯定是不愉快的。
答案 0 :(得分:3)
我相信由于调度程序是在ActorSystem级别完成的,因此它不会检查邮件的收件人。您可以想象您的调度程序将self ! "hi"
包装在Runnable中,只需将运行程序提交给执行程序,它就会盲目地执行它。
因此,即使您的收件人已经死亡,该邮件也会被发送到相应的ActorRef并最终以DeadLetter结尾。