gpt4 book ai didi

playframework - 剧中监督 Actor

转载 作者:行者123 更新时间:2023-12-04 06:11:02 25 4
gpt4 key购买 nike

我正在开发一个使用 Actor 来处理请求的 Play 应用程序。应用程序大纲将是这样的..

MyController extends Controller {

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

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

基本上我想把 MyRequestProcessor actor 放在 Supervisor actor 下。由于 Controller 是由 Play Framework 创建的,我不知道在 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)
}

关于playframework - 剧中监督 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com