You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

액터는 어디든 생성할수 있고, 어디에서든지 참조하여 메시지 전송이 가능합니다.

이와 관련된 액터의 특징을 살펴보겠습니다.


ActorOf vs ActorSelection

// 'user/myActor' 경로에 사용자가 설계한 MyActor를 생성합니다.  user는 최상위 root입니다.
IActorRef myActor = this.Sys.ActorOf<MyActor>("myActor");


// 이미 생성된 'user/MyActor'를 선택합니다.
ActorSelection myActor2 = this.Sys.ActorSelection("user/myActor");
  • ActorOf 는 액터를 직접 만들고(자신의 자식으로) 그에 대한 참조를 반환합니다.
  • ActorSelection 은 이미 생성되어 있는 액터를 선택할수가 있습니다.


Absolute vs. Relative Paths

//Local
Context.ActorSelection("../brother").Tell(msg);
Context.ActorSelection("/user/serviceA").Tell(msg);
//Remote
var remoteHello = actorSystem.ActorSelection("akka.tcp://ANODE@127.0.0.1:7000/user/hello");


액터는 상대경로로 접근이 가능하며, 원격일경우 원격주소를 명시하여 원격접근도 가능합니다.


Reusing Actor Paths


//동일한 주소의 액터를 생성하고 ,삭제하고 다시 생성한다.
IActorRef myActor = this.Sys.ActorOf<MyActor>("myActor");
ActorSelection myActor3 = this.Sys.ActorSelection("user/myActor");
myActor.GracefulStop(TimeSpan.FromSeconds(1)).Wait();
IActorRef myActor2 = this.Sys.ActorOf<MyActor>("myActor");

//주소 참조는, 동일한 주소에 액터가 있으면 참조가능하다.
myActor3.Tell("Hello", this.TestActor);
ExpectMsg("RE:Hello", TimeSpan.FromSeconds(0.2));

//액터 참조의경우 액터가 삭제되면 참조를 잃는다.
myActor.Tell("Hello", this.TestActor);
ExpectMsg("RE:Hello", TimeSpan.FromSeconds(0.2));

액터는 삭제가능하며, 삭제된 액터의 주소는 재사용해서 다시 액터할당이 가능합니다.

이역우 ActorRef와 ActorSelection은 다음과 같은 차이점이 있습니다.

  • ActorRef : 참조이후 액터가 삭제되고, 동일한 주소에 액터가 생성되어도 이전에 참조된 액터의 참조이기때문에 참조를 읽게됩니다.
  • ActorSelection : 선택이후 액터가 삭제되고 동일한 경로에 액터에 생성될시 액터에대한 주소를 선택하기때문에 참조를 읽지 않습니다.


Actor Life Cycle

Actor lifecycle





  • No labels