如果我没有收到 DeadLetter 消息,是否可能更改 ActorRef?
Is possible a ActorRef change without I receive a DeadLetter message?
我需要将 ActorRef 保留一段确定的时间。虽然我为这个 ActorRef.
保留了 "watching"
有没有可能,由于某种原因,我的 ActorRef 变为无效,而我没有收到 "DeadLetter" ?
抱歉,如果这个问题看起来很奇怪。我认为那是不可能的,但是寻找文档这个问题对我来说并不清楚。
我认为你是对的 - 文档似乎对此含糊不清。但是,考虑一下:
Akka 不提供任何消息传送保证。这就是 Akka 哲学的核心。
考虑一下您使用远程死亡监视的情况。即使远程 Actor 终止并且 Terminated
消息通过网络发送给您,您也可能收不到消息,或者它可能延迟到达。
在这种情况下,您将有一个陈旧的 ActorRef
,但如果您订阅 "Dead Letters",您可以在向它发送消息时发现它的问题。如果您在本地监视一个 Actor 并遇到某种 JVM 错误,这同样适用 - 有可能您不会收到 Terminated
消息或无法处理它并且它将会丢失。
为了解决这个问题,您可以在 Akka 之上构建恢复和重试。
简而言之,在一些罕见的情况下,这是可能的。正确的问题是您的应用程序如何在每个级别的故障中恢复。希望对您有所帮助。
我需要将 ActorRef 保留一段确定的时间。虽然我为这个 ActorRef.
保留了 "watching"有没有可能,由于某种原因,我的 ActorRef 变为无效,而我没有收到 "DeadLetter" ?
抱歉,如果这个问题看起来很奇怪。我认为那是不可能的,但是寻找文档这个问题对我来说并不清楚。
我认为你是对的 - 文档似乎对此含糊不清。但是,考虑一下:
Akka 不提供任何消息传送保证。这就是 Akka 哲学的核心。
考虑一下您使用远程死亡监视的情况。即使远程 Actor 终止并且 Terminated
消息通过网络发送给您,您也可能收不到消息,或者它可能延迟到达。
在这种情况下,您将有一个陈旧的 ActorRef
,但如果您订阅 "Dead Letters",您可以在向它发送消息时发现它的问题。如果您在本地监视一个 Actor 并遇到某种 JVM 错误,这同样适用 - 有可能您不会收到 Terminated
消息或无法处理它并且它将会丢失。
为了解决这个问题,您可以在 Akka 之上构建恢复和重试。
简而言之,在一些罕见的情况下,这是可能的。正确的问题是您的应用程序如何在每个级别的故障中恢复。希望对您有所帮助。