A和B发消息,A要持有B的ActorRef引用。
LongActor.scala
package cn.sheep.actor
import akka.actor.{Actor, ActorRef}
class LongActor(val fg: ActorRef) extends Actor{
//接受消息
override def receive: Receive = {
case "start" => {
println("I'm OK !")
fg ! "乒"
}
case "乓" => {
println("好小子")
Thread.sleep(1000) //停1s
fg ! "乒"
}
}
}
FengActor.scala
package cn.sheep.actor
import akka.actor.Actor
class FengActor extends Actor{
override def receive: Receive = {
case "start" => println("I'm OK !")
case "乒" => {
println("猝不及防")
Thread.sleep(1000) //停1s
sender() ! "乓" //sender() 谁发送过来的消息就给谁发回去
}
}
}
PingPong.scala
package cn.sheep.actor
import akka.actor.{ActorRef, ActorSystem, Props}
object PingPong extends App{
//创建ActorSystem
private val pPFactory: ActorSystem = ActorSystem("PPFactory")
//创建Feng的ActorRef
private val ffActorRef: ActorRef = pPFactory.actorOf(Props[FengActor], "ffActorRef")
//创建Long的ActorRef
//Props 后面用了(),而不是[] ,具体原因不详
private val mmActorRef: ActorRef = pPFactory.actorOf(Props(new LongActor(ffActorRef)), "mmActorRef")
ffActorRef ! "start"
mmActorRef ! "start"
}