[英]Akka Actors and Message Handling
我有一個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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.