如果指定的 actor 已停止,是否会发送使用 scheduleOnce 安排的消息?
Will a message scheduled with scheduleOnce be sent if the actor specified has been stopped?
我使用 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毫秒之后我才能正确取消它的发送(因为有一个特定的点我知道无论如何我都可以取消它),但是在我之后输入取消它的方法,导致死信。不是灾难,但肯定不愉快。
我相信因为调度程序是在 ActorSystem 级别完成的,所以它不会检查消息的接收者。您可以想象您的调度程序将 self ! "hi"
包装在一个 Runnable 中,然后将运行程序提交给执行程序,它会盲目地执行它。
所以,即使你的收件人死了,消息也会被发送到相应的 ActorRef,并在 DeadLetter 中结束。
我使用 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毫秒之后我才能正确取消它的发送(因为有一个特定的点我知道无论如何我都可以取消它),但是在我之后输入取消它的方法,导致死信。不是灾难,但肯定不愉快。
我相信因为调度程序是在 ActorSystem 级别完成的,所以它不会检查消息的接收者。您可以想象您的调度程序将 self ! "hi"
包装在一个 Runnable 中,然后将运行程序提交给执行程序,它会盲目地执行它。
所以,即使你的收件人死了,消息也会被发送到相应的 ActorRef,并在 DeadLetter 中结束。