Akka中的数据共享

时间:2018-08-24 13:56:03

标签: akka

我正在使用Akka处理申请。我有一个场景,参与者会从数组或列表中的数据库中获取某些值。子角色将引用此列表,但不允许他们对其进行修改或更新。

我有什么方法可以在演员之间共享数据?

1 个答案:

答案 0 :(得分:1)

只需将父actor从数据库填充的列表设为不可变的。然后,家长可以与孩子演员共享此列表,而不必担心shared mutable state所带来的陷阱。子演员可以向父母要求列表,父母可以通过消息传递将列表发送给孩子。演员可能看起来像这样:

case object GetFromDb
case object GetList
case object ProcessList

class ParentActor extends Actor {
  var fromDb: List[Something] = List()

  def receive = {
    case GetFromDb =>
      // query the database and replace fromDb with a new list
      fromDb = // ...
    case GetList =>
      sender() ! fromDb
  }
}

class ChildActor(parent: ActorRef) extends Actor {
  def receive = {
    case ProcessList =>
      // get the list from the parent
      parent ! GetList
    case fromDb: List[Something] =>
      // do something with the list
  }
}

在上面的示例中,参与者按原样传递了一个不可变的列表,但是如果愿意,可以轻松地将该列表放置在case类中。还要注意,子actor将对父actor的引用作为构造函数参数,但是子actor也可以使用context.parent来获取对其父parent的引用。