Tôi đang cố gắng chọn một diễn viên đã tạo. Dưới đây là một mã số:Làm thế nào để chọn diễn viên akka với diễn viênSelection?
val myActor = system.actorOf(Props(classOf[MyActor]), "myActorName")
println("myActor path - " + akka.serialization.Serialization.serializedActorPath(myActor))
println("Selection from spec akka://unit-test/user/myActorName " + system.actorSelection("akka://unit-test/user/myActorName").resolveOne().value)
println("Selection from spec /user/myActorName/ " + system.actorSelection("/user/myActorName/").resolveOne().value)
Kết quả là:
myActor path - akka.tcp://[email protected]:46635/user/myActorName#1444872428
Selection from spec akka://unit-test/user/myActorName None
Selection from spec /user/myActorName/ None
Ngoài ra tôi có thể vượt qua một thông điệp tới diễn viên và nó hoàn thành tốt. Điều gì tôi đã bỏ lỡ trong diễn viênSelection? Làm thế nào để chọn diễn viên đúng cách?
CẬP NHẬT
Nó là rất lạ, nhưng khi tôi thay system.actorSelection("/user/myActorName/").resolveOne().value
với system.actorFor("/user/myActorName/")
mọi thứ hoạt động. Ý tôi là actorFor
trả về một diễn viên. (Đó không phải là giải pháp phù hợp do actorFor
không còn được dùng nữa)
Rất ngạc nhiên :) Tôi nghĩ rằng 'thời gian chờ ngầm định' trong 'resolveOne' được sử dụng để chờ và cung cấp kết quả. – Cherry
Nope :). Scaladoc: "Nó được hoàn thành với sự thất bại ActorNotFound nếu không có diễn viên như vậy tồn tại hoặc xác định không hoàn thành trong thời gian chờ cung cấp" – dk14
Vì vậy, thời gian chờ chỉ được sử dụng để hoàn thành hoặc không quay trở lại trong tương lai, nhưng bạn vẫn phải xử lý theo cách cổ điển trong tương lai – dk14