2014-09-22 16 views
12

Akka'da aşağıdaki gibi bir oyuncu oluşturabilirim.Akka aktörüne ActorRef olarak nasıl ad verilir?

Akka.system(app).actorOf(Props(classOf[UnzipActor]), name="somename") 

Sonra farklı bir sınıftayım, bu oyuncuyu nasıl alabilirim?

Ben ActorSelection ben istemem budur, ancak bir ActorSelection

lazy val unzip: ActorSelection = 
    Akka.system.actorSelection("user/" + "somename") 

alabilirsiniz; Bir ActorRef istiyorum. Bir ActorRef nasıl edinebilirim?

Zamanlayıcıyı kullanarak bir ActorRef numaralı çağrıyı planlamak istediğim için bir ActorRef istiyorum.

Akka.system(app).scheduler.schedule(
    5 seconds, 60 seconds, mustBeActorRef, MessageCaseClass()) 
+0

, sen actorseletion mesajı gönderebilir. , Üst kapsamında çocuk oyuncu arıyor Ancak, sen getContext(). Çocuğu ("somename") –

cevap

16

Sen uyumsuz bir ActorRef almak için bir ActorSelection üzerinde yöntemini resolveOne kullanabilirsiniz.

implicit val timeout = Timeout(FiniteDuration(1, TimeUnit.SECONDS)) 
Akka.system.actorSelection("user/" + "somename").resolveOne().onComplete { 
    case Success(actorRef) => // logic with the actorRef 
    case Failure(ex) => Logger.warn("user/" + "somename" + " does not exist") 
} 

ref: Eğer aktör ref ihtiyaç Neden http://doc.akka.io/api/akka/2.3.6/index.html#akka.actor.ActorSelection

4

Looking up Actors by Concrete Path:

aşağıdaki gibi bir mesaj göndermek için gereken belirli bir aktörün hayat döngüsüne bağlı bir ActorRef edinmek için yerleşik Identify mesaj, aktöre ve aktörden gelen yanıtın sender() referansını kullanın.

Ama Tarif ettiğiniz durum için, zaten (böyle self veya yeni bir geçici aktör), ve tarafından bu mesaja tepki bir ActorRef bir mesaj göndermek için zamanlayıcı kullanmak daha uygun olabilir

MessageCaseClass'un actorSelection("user/somename")'a gönderilmesi.

+1

burada ayrıca bkz http://letitcrash.com/post/55504766698/2-2-spotlight- kullanabilirsiniz actorselection-izle-ve-tespit – jsirocchi

İlgili konular