我有一个ActorSystem,其中创建了一个顶级演员,在这个顶级演员中,我创建了几个子演员。到目前为止很好!
然后,我要做的是将这些子actor暴露给我的Application控制器(在Play应用程序中),这样我就可以直接从Play控制器中通过管道传递针对相应子actor的消息。这是一个好习惯吗,还是我应该始终通过主管将消息通过管道传递给子演员?在代码中,如下所示:
class Application extends Controller with MyActors {
def createUser = { request =>
val user: User = ... get the User from the request body
userActor ! user
}
}
这是我的Supervisor Actor外观,它由Play应用程序生命周期插件控制:
class SupervisorActor extends Actor with ActorLogging {
val allActors = MyActors(context.system.settings.config, context)
context watch allActors.userActor
// TODO: what should we do in this SupervisorActor?
def receive = {
case Terminated(terminate) => context stop self
case _ =>
}
}
然后,我将此MyActors注入到Play Application控制器中。所以我的问题是,这是一个好方法吗?子角色直接从外界接收消息,而消息不必通过主管角色。这是一个好方法。这种方法可能会遇到什么问题?
您的方法天生就没有坏处或好处。有些问题要求与儿童Actor直接沟通,有些要求使用主管。
我想说,如果需要某种路由逻辑,那么与主管联系是有益的,例如,一条消息广播给所有子Actor或基于消息的内容进行路由。
另一方面,如果主管有其他职责并且您要分配工作量,则最好直接与孩子联系。
我个人倾向于只与主管沟通,因为它允许“单门”方法。通常也更容易将主管插入到代码的其他区域,从而不必查找子ActorRef。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句