为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2021-05-31 15:10:09
我偶尔会在我的项目中使用 Akka.NET,所以我知道这项技术,可以用它做一些事情,但不认为自己是专家。虽然我使用 .NET,但熟悉 JVM 上 Akka 的人肯定可以回答这个问题。最近,我偶然看到了DeathPactException一个应用程序的日志文件。原因是一个演员(演员 A1)观看了另一个演员(A2),这是它自己开始的。但是,A1 没有处理TerminatedA2 发送的消息。这是由于 A2 在执行其任务后实际上停止了自己造成的。多亏了合理定义的主管层次结构等,系统本身运行得很好:A1 被它的主管立即重新启动。实际上是否有任何场景,一个演员会.Watch()另一个演员,然后忽略该Terminated消息?或者臭名昭著的DeathPactException基本上总是应用程序代码中的错误,类似于NullReferenceException/ NullPointerException?
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

ADeathPactException不一定表示编程错误。

故意不处理Terminated消息是一种在该演员的任何一个孩子正常停止时停止所有该演员的孩子的方法。事件顺序如下:

  1. Actorparent监视其所有子代 、c1c2c3,但不处理Terminated消息。

  2. 孩子c2正常停止。

  3. parent抛出 a DeathPactException,这会导致parent重新启动(这是默认的主管策略,可以在parent的主管/父级中覆盖)。

  4. parentpreRestart钩子被调用,默认情况下会停止所有parent的孩子。

选择不处理Terminated消息实际上是为非异常(即,不响应故障)情况制定全面停止策略的一种手段。


查看完整回答
反对 回复 2021-06-02
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信