我怎样才能让哪位儿童演员在主管身上有异常。 基本上我想处理其他事情,如记录数据库失败等。 在停止失败的演员之前。但为此我必须确切地知道哪个演员 有例外。
我的supervisor战略代码块如
/* stop task actor on unhandled exception */
private static SupervisorStrategy strategy = new OneForOneStrategy(
1,
Duration.create(1, TimeUnit.MINUTES),
new Function<Throwable, SupervisorStrategy.Directive>() {
@Override
public SupervisorStrategy.Directive apply(Throwable t) throws Exception {
return SupervisorStrategy.stop();
}
}
);
@Override
public SupervisorStrategy supervisorStrategy() {
return strategy;
}
答案 0 :(得分:5)
如果您阅读以下关于Fault Tolerance的链接,您可以看到,您可以在监督策略中根据这条信息获取失败的儿童演员参考:
如果战略是在监督行动者内宣布的(相反 到一个单独的类)其决策者可以访问所有内部状态 线程安全的方式,包括获取引用 当前失败的子项(可用作失败的
getSender
消息)。
因此,如果您在监督策略中使用getSender
,您应该能够确定哪个孩子产生了异常并采取相应行动。
答案 1 :(得分:2)
当您观看孩子时,您会收到Terminated
消息,其中包含actor
字段和其他信息。另见What Lifecycle Monitoring Means。您还可以通过覆盖其preRestart
/postRestart
方法来处理子actor内部的失败。