Playframework 监制演员

Playframework 监制演员,playframework,playframework-2.0,akka,Playframework,Playframework 2.0,Akka,我正在开发一个play应用程序,它使用参与者来处理请求。申请外线应该是这样的 MyController extends Controller { system.actorOf(Props(new MyRequestProcessor)) val actorRef = MyRequestProcessor def handle(parse.json) { request => actorRef ! request.body Ok } } 基本上,我希望将

我正在开发一个play应用程序,它使用参与者来处理请求。申请外线应该是这样的

MyController extends Controller {

  system.actorOf(Props(new MyRequestProcessor))
  val actorRef = MyRequestProcessor

  def handle(parse.json) { request =>
    actorRef ! request.body
    Ok
  }
}

基本上,我希望将MyRequestProcessor角色置于主管角色之下。由于控制器是由play框架创建的,所以我不知道在Supervisor中使用创建RequestProcessor并获取ActorRef的首选方法

希望代码是这样的

 Supervisor extends Actor {

   override val supevisorStrategy = OneForOneStrategy….

 }

 MyController extends Controller {

  val supervisorRef = system.actorOf(Props[Supervisor]...

  val processorRef = //NEED A WAY TO INSTANTIATE MyRequestProcessor WITHIN 
  //Supervisor and get that ActorRef back Using Supervisor's context.actorOf[]

 def handle(parse.json) { request
   processorRef ! request.body
 }

}
自讨苦吃吧

import akka.actor._
import akka.pattern.ask
import scala.concurrent.Await
import scala.concurrent.duration._
import akka.util.Timeout

object Supervisor {
   case object GetChild
}

class Supervisor(childProps: Props) extends Actor {
   import Supervisor._

   val child = context.actorOf(childProps, name = "child")

   def receive = {
      case GetChild => sender ! child
   }
}

class Child extends Actor {
   def receive = Actor.emptyBehavior
}

object MyController extends Controller {
   val system = ActorSystem("my-system")
   val supervisor = system.actorOf(Props(classOf[Supervisor], Props[Child]), name = "parent")
   implicit val timeout = Timeout(5 seconds)
   // Blocking is not ideal, but is not the point in this example anyway
   val child = Await.ready((supervisor ? GetChild).mapTo[ActorRef], timeout.duration)
}

我在寻找一个不使用ask(?)模式的解决方案。感谢您提供的详细示例,您可以询问孩子,也可以让家长将特定消息委托给孩子。另外一个选项是使用
ActorSelection
查找子项,但为此,您需要子项的名称(或者如果您确定只有一个子项,请查找
。/parent/*
)。我很确定没有其他选择。也许主管可以把信息转发给他的孩子?保留原始发件人信息的。