簡體   English   中英

Akka演員和消息處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM