Akka:DeathPactException 总是编程错误吗?
Akka: is a DeathPactException always a programming error?
我偶尔会在我的项目中使用 Akka.NET,所以我了解这项技术,可以用它来做一些事情,但不要认为自己是专家。
虽然我用的是.NET,但是熟悉JVM上Akka的人肯定能回答这个问题
最近,我在查看应用程序的日志文件时遇到 DeathPactException
。原因是一个演员(演员 A1)观看了另一个演员(A2),这是它自己启动的。但是,A1 没有处理 A2 发送的 Terminated
消息。这是由 A2 在执行其任务后实际停止自身造成的。多亏了一个合理定义的主管层次结构等,系统本身运行得很好:A1 被它的主管立即简单地重新启动了。
实际上是否存在演员 .Watch()
另一个演员然后忽略 Terminated
消息的情况?或者臭名昭著的 DeathPactException
基本上总是应用程序代码中的错误,类似于 NullReferenceException
/NullPointerException
?
DeathPactException
不一定表示编程错误。
故意不处理 Terminated
消息是一种在任何一个 actor 的 children 正常停止时停止该 actor 的所有 children 的方法。事件顺序如下:
- Actor
parent
监视其所有 children、c1
、c2
和 c3
,但不处理 Terminated
留言。
- Child
c2
正常停止。
parent
抛出一个DeathPactException
,导致parent
重启(这是默认的supervisor策略,可以在parent
的supervisor/parent).
parent
的 preRestart
挂钩被调用,默认情况下会停止所有 parent
的 children.
选择不处理 Terminated
消息实际上是一种为 non-exceptional(即不响应失败)情况制定 all-for-one 停止策略的方法。
我偶尔会在我的项目中使用 Akka.NET,所以我了解这项技术,可以用它来做一些事情,但不要认为自己是专家。
虽然我用的是.NET,但是熟悉JVM上Akka的人肯定能回答这个问题
最近,我在查看应用程序的日志文件时遇到 DeathPactException
。原因是一个演员(演员 A1)观看了另一个演员(A2),这是它自己启动的。但是,A1 没有处理 A2 发送的 Terminated
消息。这是由 A2 在执行其任务后实际停止自身造成的。多亏了一个合理定义的主管层次结构等,系统本身运行得很好:A1 被它的主管立即简单地重新启动了。
实际上是否存在演员 .Watch()
另一个演员然后忽略 Terminated
消息的情况?或者臭名昭著的 DeathPactException
基本上总是应用程序代码中的错误,类似于 NullReferenceException
/NullPointerException
?
DeathPactException
不一定表示编程错误。
故意不处理 Terminated
消息是一种在任何一个 actor 的 children 正常停止时停止该 actor 的所有 children 的方法。事件顺序如下:
- Actor
parent
监视其所有 children、c1
、c2
和c3
,但不处理Terminated
留言。 - Child
c2
正常停止。 parent
抛出一个DeathPactException
,导致parent
重启(这是默认的supervisor策略,可以在parent
的supervisor/parent).parent
的preRestart
挂钩被调用,默认情况下会停止所有parent
的 children.
选择不处理 Terminated
消息实际上是一种为 non-exceptional(即不响应失败)情况制定 all-for-one 停止策略的方法。