Programing/Akka

Akka Actor Life Cycle

BUST 2018. 10. 21. 21:25

Akka Actor Life Cycle

actor_lifecycle.png
  • Actor는 UID, Mailbox, Path를 가지고 있다.
  • 외부에서는 ActorRef를 통해 접근을 한다., Path, UID를 가지고 있는다.
    • 객체를 직접 접근하지는 못한다 (Hides the instance)
  • ActorSelection를 통해 ActorRef를 가지고 온다.
  • actorOf를 통해 액터를 생성을 할수 있다.
  • preStart() method : 엑터가 시작되고 첫번째 메시지를 받기 전에 실행이 된다
  • postStop() method  엑터가 중단될때 시작된다, 실행이 되후 메시지를 받지 못한다.
  • resume와 restart의 차이는 새로운 Actor를 생성을 하나 안하나의 차이이다.
  • context.stop() 또는 Posion Pill를 이용하여 Actor를 종료할 수 있다.

Example with child Actor

class StartStopActor1 extends AbstractActor {
  @Override
  public void preStart() {
    System.out.println("first started");
    getContext().actorOf(Props.create(StartStopActor2.class), "second");
  }

  @Override
  public void postStop() {
    System.out.println("first stopped");
  }

  @Override
  public Receive createReceive() {
    return receiveBuilder()
        .matchEquals("stop", s -> {
          getContext().stop(getSelf());
        })
        .build();
  }
}

class StartStopActor2 extends AbstractActor {
  @Override
  public void preStart() {
    System.out.println("second started");
  }

  @Override
  public void postStop() {
    System.out.println("second stopped");
  }

  // Actor.emptyBehavior is a useful placeholder when we don't
  // want to handle any messages in the actor.
  @Override
  public Receive createReceive() {
    return receiveBuilder()
        .build();
  }
}
  • 예제에서는 getContext().stop(getSelf()) 를 이용하여 정지를 했는 데 PosionPill 메시지를 이용하는 것이 좋다.

ActorRef first = system.actorOf(Props.create(StartStopActor1.class), "first");

first.tell("stop", ActorRef.noSender());



Result

first started

second started

second stopped

first stopped


  • 엑터가 시작이 될때 부모 액터 -> 자식 엑터 순으로 시작이 된다.
  • 엑터가 종료가 될대 자식 엑터 -> 부모 엑터 순으로 종료가 된다.


'Programing > Akka' 카테고리의 다른 글

Akka Stream Materialized values  (0) 2018.11.24
Akka Actor Hierarchy  (0) 2018.10.22
Akka Pulling Pattern  (0) 2018.10.13
Akka with Spring  (0) 2018.09.29
Akka Actor 개발팁  (0) 2018.09.18