Akka:DeathPactException 总是一个编程错误吗?

我偶尔会在我的项目中使用 Akka.NET,所以我知道这项技术,可以用它做一些事情,但不认为自己是专家。

虽然我使用 .NET,但熟悉 JVM 上 Akka 的人肯定可以回答这个问题。

最近,我偶然看到了DeathPactException一个应用程序的日志文件。原因是一个演员(演员 A1)观看了另一个演员(A2),这是它自己开始的。但是,A1 没有处理TerminatedA2 发送的消息。这是由于 A2 在执行其任务后实际上停止了自己造成的。多亏了合理定义的主管层次结构等,系统本身运行得很好:A1 被它的主管立即重新启动。

实际上是否有任何场景,一个演员会.Watch()另一个演员,然后忽略该Terminated消息?或者臭名昭著的DeathPactException基本上总是应用程序代码中的错误,类似于NullReferenceExceptionNullPointerException


MMTTMM
浏览 131回答 1
1回答

繁花不似锦

ADeathPactException不一定表示编程错误。故意不处理Terminated消息是一种在该演员的任何一个孩子正常停止时停止所有该演员的孩子的方法。事件顺序如下:Actorparent监视其所有子代 、c1、c2和c3,但不处理Terminated消息。孩子c2正常停止。parent抛出 a DeathPactException,这会导致parent重新启动(这是默认的主管策略,可以在parent的主管/父级中覆盖)。parent的preRestart钩子被调用,默认情况下会停止所有parent的孩子。选择不处理Terminated消息实际上是为非异常(即,不响应故障)情况制定全面停止策略的一种手段。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java