Programing/Akka

Actor Selection을 통한 Actor 찾기 (Identifying Actors via Actor Selection)

BUST 2018. 9. 2. 15:04

Actor Selection을 통한 Actor 찾기 (Identifying Actors via Actor Selection)

  • 하나의 액터는 Unique한 Path를 가지고 있기 때문에 Path를 이용하여 Actor를 찾을수가 있다 (Look up)
// will look up this absolute path
getContext().actorSelection("/user/serviceA/actor");
// will look up sibling beneath same supervisor
getContext().actorSelection("../joe");
  • `ActorSelection` 객체가 리턴이 된다.
    • Remote System에서는 `ActorSelection`은 처음 응답은 한 Actor (initiating first contact with a remote system)
    • At-Least-Once Delivery

 

ActorSelection을 통해 ActorRef 얻기

import akka.actor.ActorIdentity;
import akka.actor.ActorSelection;
import akka.actor.Identify;
public class Follower extends AbstractActor {
  final Integer identifyId = 1;
 
  public Follower(){
    ActorSelection selection = getContext().actorSelection("/user/another");
    selection.tell(new Identify(identifyId), getSelf());
  }
  
  @Override
  public Receive createReceive() {
    return receiveBuilder()
      .match(ActorIdentity.class, id -> id.getActorRef().isPresent(), id -> {
        ActorRef ref = id.getActorRef().get();
        getContext().watch(ref);
        getContext().become(active(ref));
      })
      .match(ActorIdentity.class, id -> !id.getActorRef().isPresent(), id -> {
        getContext().stop(getSelf());
      })
      .build();
  }
  
  final AbstractActor.Receive active(final ActorRef another) {
    return receiveBuilder()
      .match(Terminated.class, t -> t.actor().equals(another), t ->
        getContext().stop(getSelf())
      )
      .build();
  }
}
  • `/user/another` 이라는  path를 가진 Actor Selection을 찾고 ActorRef를 얻은뒤 `become`를 통해 다른 기능으로 작동으로 바뀌는 엑터
  • `resolveOne` 메서드를 사용하면 ActorRef를 가진 Future을 받을수가 있다.
    • Future를 이용하여 동기적으로 ActorRef를 가지고 올수 있다.
    • 하지만 이경우에는 같은 path를 가진 (cluster) Actor를 하나 밖에 못가지고 온다.
    • `/*` 같이 전체 Actor를 가지고 오고 싶다면 위와 같은 방식으로 해야되고, child 관계 까지 필요하다면 Recursive 하게 이용하여 가지고 올수 있다.
 

추가 (2018/09/06)

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

Akka Distributed Publish Subscribe in Cluster #3. Configuration  (0) 2018.09.11
Akka Distributed Publish Subscribe in Cluster #2.Send  (0) 2018.09.11
Akka Cluster Seed Node  (0) 2018.08.25
Akka Management  (0) 2018.08.21
Akka Scheduler  (0) 2018.08.21