- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里是 Java API。我试图了解 Akka actor 监督的真正运作方式,特别是监督者策略。对我来说,该策略感觉只是(本质上)异常到指令的映射。
刚刚看了官方Akka Fault Tolerance documentation ,但在该文档中,他们实际上没有明确说明何时/何地/如何触发监管策略。
所以我问:何时启用监督策略?当子 Actor 从其 onReceive
方法内部抛出一个 Throwable
时?或者有什么不同?
最佳答案
你是正确的,除了它在默认的决策规则中包含了可抛出的东西,即错误,以及异常,并且它在Actor抛出可抛出的任何时候都会运行。根据http://doc.akka.io/docs/akka/2.0/java/fault-tolerance.html#default-supervisor-strategy ,默认情况下,如果没有定义的supervisor策略或者它没有覆盖(用户创建的)Actor抛出的异常,则按顺序执行以下规则,直到触发:
监督的良好审查位于 http://doc.akka.io/docs/akka/2.3.11/general/supervision.html如果您还没有看过。
Derek Wyatt 的“Akka Concurrency”第 8 章中对代码级别进行了很好的讨论。它主要处理 Scala 版本,但我相信 Actor 故障处理是在 Scala 中实现的(依赖于 Java)。
查看 2.3.11 源代码,默认的 Actor 故障处理决策程序位于 akka-actor_2.11-2.3.11-sources.jar\akka\actor.FaultHandling.scala 中,如下:
/**
* When supervisorStrategy is not specified for an actor this
* [[Decider]] is used by default in the supervisor strategy.
* The child will be stopped when [[akka.actor.ActorInitializationException]],
* [[akka.actor.ActorKilledException]], or [[akka.actor.DeathPactException]] is
* thrown. It will be restarted for other `Exception` types.
* The error is escalated if it's a `Throwable`, i.e. `Error`.
*/
final val defaultDecider: Decider = {
case _: ActorInitializationException ⇒ Stop
case _: ActorKilledException ⇒ Stop
case _: DeathPactException ⇒ Stop
case _: Exception ⇒ Restart
}
/**
* When supervisorStrategy is not specified for an actor this
* is used by default. OneForOneStrategy with decider defined in
* [[#defaultDecider]].
*/
final val defaultStrategy: SupervisorStrategy = {
OneForOneStrategy()(defaultDecider)
}
这与文档一致 - 或多或少,因为 defaultDecider 不包含显式
case _ => Escalate // _ is the scala wildcard for anything
这是在 makeDecider 函数中实现的,如果 defaultDecider 不匹配 Throwable,则默认为 Escalate;并且文档没有提到包含 DeathPactException 的规定,这可能是为了减少细节上的困惑。
关于java - Akka SupervisorStrategy 与子进程的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30963299/
这里是 Java API。我试图了解 Akka actor 监督的真正运作方式,特别是监督者策略。对我来说,该策略感觉只是(本质上)异常到指令的映射。 刚刚看了官方Akka Fault Toleran
我将 JDK8 与 IntelliJ IDEA Ultimate 2017.1 一起使用(在我的 Win x64 上试过 - Java 版本 1.8.0_92-windows-x64) 我有一个大型的
我是一名优秀的程序员,十分优秀!