Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Akka:未使用Java注册自定义Akka监控策略_Java_Akka_Actor_Akka Supervision - Fatal编程技术网

Akka:未使用Java注册自定义Akka监控策略

Akka:未使用Java注册自定义Akka监控策略,java,akka,actor,akka-supervision,Java,Akka,Actor,Akka Supervision,我将探索Akka生命周期和Akka演员监督策略。我正在创建我自己的异常,并覆盖public-SupervisorStrategy-SupervisorStrategy()方法,以探索akka的生命周期及其恢复策略。以下是我的代码: public class JavaActor extends AbstractActor { @Override public PartialFunction<Object, BoxedUnit> receive() { System.out.p

我将探索
Akka
生命周期和
Akka
演员监督策略。我正在创建我自己的异常,并覆盖
public-SupervisorStrategy-SupervisorStrategy()
方法,以探索akka的生命周期及其恢复策略。以下是我的代码:

public class JavaActor extends AbstractActor {

@Override
public PartialFunction<Object, BoxedUnit> receive() {
    System.out.println("----   In the receive method "+Thread.currentThread().getName());
    return ReceiveBuilder.
            matchEquals("Ping" , s -> {
                System.out.println("$$$ Ping Match Successfully");
                throw new EsclateException("Might be esclate");
            }).
            matchAny(x -> {
                System.out.println("### Matched value is :  "+ x);
                sender().tell(new Status.Failure(new Exception("unknown message")), self());
            }).build();
}

@Override
public void preRestart(Throwable reason, Option<Object> message) throws Exception {
    super.preRestart(reason, message);
    System.out.println(">>> Actor preRestart method calls : "+Thread.currentThread().getName());
}

@Override
public void postRestart(Throwable reason) throws Exception {
    super.postRestart(reason);
    System.out.println(">>> Actor postRestart method calls : "+Thread.currentThread().getName());
}

@Override
public void preStart() throws Exception {
    super.preStart();
    System.out.println(">>> Actor preStart method calls "+Thread.currentThread().getName());
}

@Override
public void postStop() throws Exception {
    super.postStop();
    System.out.println(">>> Actor postStop method calls "+Thread.currentThread().getName());
}

@Override
public SupervisorStrategy supervisorStrategy() {
    System.out.println("**** SupervisorStrategy Override Successfully ****");
    return new OneForOneStrategy(5, Duration.create(1, TimeUnit.MINUTES),
            DeciderBuilder.match(ResumeException.class, e -> SupervisorStrategy.resume())
            .match(RestartException.class, e -> SupervisorStrategy.restart())
            .match(StopException.class, e -> SupervisorStrategy.stop())
            .match(EsclateException.class, e -> SupervisorStrategy.escalate())
            .matchAny(e -> SupervisorStrategy.escalate()).build());

}}

参与者由其父代而非自身监督,因此当参与者失败时,将应用其父代参与者的
监督策略

在您的示例中,您没有包含自己的家长,因此应用了用户监护人角色监督


您可以在这里的文档中阅读更多关于监督的信息:

一个参与者是由其父代而不是自己监督的,因此当参与者失败时,将应用其父代参与者的
监督策略

在您的示例中,您没有包含自己的家长,因此应用了用户监护人角色监督


您可以在这里的文档中阅读更多关于监管的信息:

Hey@johanandren是否可以更改监护人监管策略?是的,文档中提到了这一点。但我建议你介绍你自己的主管演员,而不是改变用户的监护人策略。这很酷,你能发送链接,他们提到的改变监护人策略吗?我只是想探索更多,这是whey试图改变监护人策略。嘿@johanandren,改变监护人监管策略是否可能?是的,文档中提到了。但我建议你介绍你自己的主管演员,而不是改变用户的监护人策略。这很酷,你能发送链接,他们提到的改变监护人策略吗?我只是想探索更多,这就是whey试图改变卫报的策略。
public class JavaActorTest {

public static ActorSystem system;

@BeforeClass
public static void start() {
    system = ActorSystem.create("ActorLifeCycleTest");
}

@AfterClass
public static void cleanup() {
    JavaTestKit.shutdownActorSystem(system);
    system = null;
}

@Test
public void testActorCreation(){
    TestActorRef<JavaActor> actorRef = TestActorRef.create(system, Props.create(JavaActor.class));
    actorRef.tell("Ping", ActorRef.noSender());
    assertThat(true, is(true));
}}