Page History
...
Actor의 기본 생성과 Child Actor 생성
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
class PrintMyActorRefActor extends Actor { override def receive: Receive = { case "printit" => val secondRef = context.actorOf(Props.empty, "second-actor") //자식의 생성에 대한 책임은 부모가 가진다. ( 생성하고 자식노드로 런타임 이동하는 형태의 방법 제한) println(s"Second: $secondRef") } } val firstRef = system.actorOf(Props[PrintMyActorRefActor], "first-actor") // actorOf 는 Actor생성시 사용됩니다. println(s"First : $firstRef") firstRef ! "printit" // !는 스칼라에서 Input을 위한 키워드이며, c++의 cout >> 과 유사한 키워드 , //C#또는 JAVA에서는 명시적으로 firstRef.Tell("printit") 이렇게 사용하면 됩니다. //액터 생성 순서 first-actor <= second-actor 가 parent <= child 관계가 된다. First : Actor[akka://testSystem/user/first-actor#1053618476] Second: Actor[akka://testSystem/user/first-actor/second-actor#-1544706041] |
...
어떠한 의미에서 RESAPI 설계도 Top-Level 아키텍쳐를 따른다고 볼수 있습니다. ( 상위에서 하위기능으로 분류)
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
var parentActor= system.ActorSelection("akka://testSystem/user/first-actor"); var childActor= system.ActorSelection("akka://testSystem/user/first-actor/second-actor"); |
...
다만 부모에게 발생한 예외를 자식에게 전가시키지 않습니다. ( 예외처리모델에 더 상세하게 설명)
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
class StartStopActor1 extends Actor { override def preStart(): Unit = { println("first started") context.actorOf(Props[StartStopActor2], "second") } override def postStop(): Unit = println("first stopped") override def receive: Receive = { case "stop" => context.stop(self) } } class StartStopActor2 extends Actor { override def preStart(): Unit = println("second started") override def postStop(): Unit = println("second stopped") // Actor.emptyBehavior is a useful placeholder when we don't // want to handle any messages in the actor. override def receive: Receive = Actor.emptyBehavior } val first = system.actorOf(Props[StartStopActor1], "first") first ! "stop" //OutPut //first started //second started //second stopped //first stopped |
...
Child 액트가 장애발생시, 디양한 복구전략( 3초간 30초동안시도)을 통해 Child액트의 복구가 가능하다.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
var supervisor = BackoffSupervisor.Props( Backoff.OnFailure( childProps, childName: "supervised-actor", minBackoff: TimeSpan.FromSeconds(3), maxBackoff: TimeSpan.FromSeconds(30), randomFactor: 0.2) ); |
...