Scala akka询问播放控制器中的Actor选择

Scala akka询问播放控制器中的Actor选择,scala,playframework,akka,Scala,Playframework,Akka,我试图在游戏中实现这种模式: class MyController extends Controller { def getStuff(actorPath: String) = { implicit request => Async { val myFutureStuff = system.actorSelection(actorPath) ? FindStuff() // Handle the result

我试图在游戏中实现这种模式:

class MyController extends Controller {
    def getStuff(actorPath: String) = {
        implicit request => Async {
            val myFutureStuff = system.actorSelection(actorPath) ? FindStuff()

            // Handle the result
        }
    }
}
但很明显,你不能问演员的选择,只能问演员的选择

因此,您必须从ActorSelection获取ActorRef,这意味着向ActorSelection发送标识消息并获取响应。但是,我在控制器中找不到一种简单的方法来实现这一点,因为参与者无法将Identify的响应发送回控制器

从我看到的例子中,人们通过控制器与演员交流,他们直接使用ActorRef。在我的应用程序中,我不想挂在这些ActorRefs上。相反,我点燃它们,让它们离开,直到我需要与它们交流。当这种情况发生时,我希望能够通过他们的路径找到他们,并询问他们的一些信息

在仍然使用演员后端/播放前端方法的情况下,有没有更好的方法来完成我想要的任务


非常感谢

我不确定这是否属实,您应该能够在ActorSelection上使用ask模式。所以这在理想情况下应该是可行的,actorSelection的唯一问题是,因为它只通过其路径查找参与者,所以不能保证您在后续调用中引用的是同一参与者

但是,当您希望在非参与者实例中接收回复时,其中一种方法是使用future

  implicit val timeout = Timeout(5 seconds)
  val future = system.actorSelection(remotePath) ? Identify(remotePath)
  val result = Await.result(future, timeout.duration)
  val actorRef = result match {
    case ActorIdentity(path, Some(actor)) => actor
  }

当我在控制台中尝试时,我得到:value?不是akka.actor.actorSelecton的成员您使用的是什么akka版本?我相信我使用的是2.2-我几周前刚下载了这个。更正-剧本构建文件说我使用的是akka.actorsAh的2.1版本,所以这似乎是问题所在。如果您升级到2.2,我相信这应该得到解决。