我使用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毫秒(因为有一个特定的点,我知道,无论如何,我都可以取消它),但是在我输入取消它的方法之后,就会产生死信。这不是一场灾难,但肯定令人不快。
发布于 2015-02-26 21:41:49
我相信,由于调度程序是在ActorSystem级别完成的,所以它不会检查消息的接收方。您可以想象,您的调度程序将self ! "hi"封装在可运行的内部,只需将运行程序提交给执行器,它就会盲目地执行。
因此,即使您的收件人已经死亡,该消息也将被发送到相应的ActorRef,并将在DeadLetter中结束。
https://stackoverflow.com/questions/28751942
复制相似问题