基于此问题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} ...