Java 理解Akka中的主管策略
我正在阅读Akka文档,现在我在关于的部分。我决定尝试一些例子: 以下是我的演员: 母公司Java 理解Akka中的主管策略,java,akka,Java,Akka,我正在阅读Akka文档,现在我在关于的部分。我决定尝试一些例子: 以下是我的演员: 母公司 private static class MyUntypedActor extends UntypedActor{ public void onReceive(Object message) throws Exception { System.out.println("Recieved: " + message); } @Override public
private static class MyUntypedActor extends UntypedActor{
public void onReceive(Object message) throws Exception {
System.out.println("Recieved: " + message);
}
@Override
public void preStart(){
getContext().actorOf(AnotherUntypedActor.props()).tell("Process it", getSelf());
}
public static Props props(){
return Props.create(MyUntypedActor.class);
}
}
孩子
主要内容:
因此,我的孩子演员经历了失败,我认为it应该以某种方式通知家长
但我得到的是:
Recieved: Message
My: Process it
[ERROR] [07/14/2016 19:05:13.726] [default-akka.actor.default-dispatcher-4] [akka://default/user/$a/$a] Crashed: Actor[akka://default/user/$a/$a#-950392568]
监督实际上做什么?儿童演员犯了什么错误?我只是在日志中收到一条错误消息。监管战略是什么意思?默认设置为
OneForOneStrategy(-1,Duration.Inf,true)
通过使用监督策略,您可以决定在监督参与者失败时应该对其执行什么操作。您必须重写父参与者中的
supervisionStrategy()
方法并定义策略。即(不确定是否正确,因为我使用Scala表示Akka)
在这种情况下,如果发生SomeException
,将重新启动actor。否则,它将被停止。你可以从四种策略中选择一种。
提示:创建特定的异常 因此,该策略的主要目的是定义一种在抛出异常时如何作出反应的方法。而实际的决策是在decider函数中做出的。默认情况下,它什么也不做(据我所知),对吧?差不多。就我所记得的,默认值是
Restart
。
Recieved: Message
My: Process it
[ERROR] [07/14/2016 19:05:13.726] [default-akka.actor.default-dispatcher-4] [akka://default/user/$a/$a] Crashed: Actor[akka://default/user/$a/$a#-950392568]
OneForOneStrategy(-1,Duration.Inf,true)
@Override
public SupervisorStrategy supervisorStrategy() {
return strategy;
}
private static SupervisorStrategy strategy =
new OneForOneStrategy(10, Duration.create("1 minute"),
t -> {
if (t instanceof SomeException) {
return restart();
} else {
return stop();
}
});