我有一个节点网络都使用自定义GraphStageLogic
实现。我找不到任何API来确定某个阶段何时抛出异常(例如IllegalArgumentException
为Cannot pull port
)。 Akka唯一能做的就是下游连接失败了。我需要确定的是,例如在postStop
中或通过回调,当节点由于运行时异常而关闭时,并将该信息传播到监视整个系统状态的Promise
。使用withAttributes(supervisionStrategy)
也没有任何影响。让我感到困惑的是,没有办法监控GraphStageLogic
内部抛出的异常? failStage
最终就像GraphStageLogic
的整个API一样。
在定义用于实现Graph的ActorMaterializer时使用decider应该有效:
implicit val materializer: ActorMaterializer = ActorMaterializer(
ActorMaterializerSettings(actorSystem).withSupervisionStrategy(decider))
决策者是典型的
val decider: Supervision.Decider = {
case e: IllegalArgumentException => ....
}