Akka:如何让演员在主管上引起异常

时间:2015-01-23 13:25:46

标签: java akka

我怎样才能让哪位儿童演员在主管身上有异常。 基本上我想处理其他事情,如记录数据库失败等。 在停止失败的演员之前。但为此我必须确切地知道哪个演员 有例外。

我的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;
}

2 个答案:

答案 0 :(得分:5)

如果您阅读以下关于Fault Tolerance的链接,您可以看到,您可以在监督策略中根据这条信息获取失败的儿童演员参考:

  

如果战略是在监督行动者内宣布的(相反   到一个单独的类)其决策者可以访问所有内部状态   线程安全的方式,包括获取引用   当前失败的子项(可用作失败的getSender   消息)。

因此,如果您在监督策略中使用getSender,您应该能够确定哪个孩子产生了异常并采取相应行动。

答案 1 :(得分:2)

当您观看孩子时,您会收到Terminated消息,其中包含actor字段和其他信息。另见What Lifecycle Monitoring Means。您还可以通过覆盖其preRestart/postRestart方法来处理子actor内部的失败。