Akka Actor Life Cycle
- 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 |