2014-09-22 14 views
12

Trong Akka tôi có thể tạo một diễn viên như sau.Làm cách nào để diễn viên Akka bằng tên ActorRef?

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

Sau đó, tôi đang ở một lớp khác, làm cách nào để có được diễn viên này?

tôi có thể nhận được một ActorSelection

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

Tuy nhiên, một ActorSelection không phải là những gì tôi muốn; Tôi muốn một số ActorRef. Làm thế nào tôi có thể nhận được ActorRef?

Tôi muốn có một ActorRef vì tôi muốn lên lịch cuộc gọi đến số ActorRef bằng cách sử dụng trình lập lịch biểu.

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

Tại sao bạn cần diễn viên ref, bạn có thể gửi thông điệp tới actorseletion. Tuy nhiên, nếu bạn đang tìm kiếm một diễn viên con trong bối cảnh gốc, bạn có thể sử dụng getContext(). Child ("somename") –

Trả lời

16

Bạn có thể sử dụng phương pháp resolveOne trên ActorSelection để nhận ActorRef không đồng bộ.

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: http://doc.akka.io/api/akka/2.3.6/index.html#akka.actor.ActorSelection

4

Looking up Actors by Concrete Path:

Để có được một ActorRef được ràng buộc với vòng đời của một diễn viên cụ thể mà bạn cần gửi một tin nhắn, chẳng hạn như được xây dựng trong Identify tin nhắn, đến diễn viên và sử dụng tham chiếu sender() về câu trả lời của diễn viên.

Nhưng đối với trường hợp bạn đang mô tả, nó có thể thích hợp hơn để sử dụng chức năng lịch để gửi một thông điệp tới một ActorRef bạn đã có (như self hoặc một diễn viên tạm thời mới), và phản ứng với thông điệp rằng bởi gửi MessageCaseClass tới actorSelection("user/somename").

+1

xem thêm tại đây http://letitcrash.com/post/55504766698/2-2-spotlight- actorselection-watch-and-ident – jsirocchi

Các vấn đề liên quan