gpt4 book ai didi

java - Akka Actor 和消息处理

转载 作者:行者123 更新时间:2023-12-01 10:57:04 31 4
gpt4 key购买 nike

我有一个 ActorSystem,我在其中创建一个顶级 Actor ,并在这个顶级 Actor 中创建几个子 Actor 。到目前为止一切顺利!

然后我要做的就是将这些子 Actor 暴露给我的应用程序 Controller (在 Play 应用程序中),以便我可以直接从 Play Controller 传输针对相应子 Actor 的消息。这是一个好的做法还是我应该始终通过主管将消息传递给 child 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 注入(inject)到 Play 应用程序 Controller 中。所以我的问题是,这是一个好方法吗?子 Actor 直接从外部世界接收消息,而无需通过 Supervisor Actor。这是一个好方法吗?使用这种方法我可能会遇到什么问题?

最佳答案

您的方法本质上没有什么坏处或好处。有些问题需要与子 Actor 直接沟通,有些则需要使用主管。

我想说的是,如果您需要某种类型的路由逻辑,例如,联系主管是有益的。 1 条消息被广播到所有子 Actor 或根据消息内容进行路由。

另一方面,如果主管有其他职责并且您想分配工作量,那么直接联系 child 可能会更好。

我个人倾向于只与主管沟通,因为它允许“单门”方法。在代码的其他区域依赖注入(inject)主管通常也更容易,这样您就不必查找子 ActorRef。

关于java - Akka Actor 和消息处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33581062/

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