Akka演员之间的数据共享

问题描述 投票:0回答:1

基于此问题Data sharing in Akka,我实现了一个简单的akka​​层次结构,以在两个参与者之间共享数据:

package playground

import akka.actor.{Actor, ActorRef, ActorSystem, Props}

case object GetFromDb
case object GetList
case object ProcessList

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

  def receive = {
    case GetFromDb =>
      // query the database and replace fromDb with a new list
      fromDb = List(1,2,3)

    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[Int] =>
      fromDb.foreach(println)
  }
}

object AkkaDataSharingDriver extends App {

  val system: ActorSystem = ActorSystem("as")
  implicit val ec = system.dispatcher

  val parentActorRef: ActorRef = system.actorOf(Props(new ParentActor()))
  val childActorRef: ActorRef = system.actorOf(Props(new ChildActor(parentActorRef)))

  parentActorRef ! GetFromDb
  parentActorRef ! GetList

  childActorRef ! ProcessList

}

已打印列表值1,2,3,因此似乎出现了消息fromDb发送到ChildActor,导致该foreach被调用:

case fromDb: List[Int] =>
      fromDb.foreach(println)

但是由于永远不会显式发送带有fromDb的消息,这是导致原因的原因>>

fromDb.foreach(println)

被调用?它以某种方式隐式发送吗?

基于此问题,在Akka中进行数据共享,我已经实现了一个简单的akka​​层次结构,以在两个参与者之间共享数据:包游乐场import akka.actor。{Actor,ActorRef,ActorSystem,Props} ...

scala slick
1个回答
0
投票
子/父命名很混乱,因为此代码中没有父/子关系。最好将它们命名为DbProvider和DbClient之类。
© www.soinside.com 2019 - 2024. All rights reserved.