16.4 Actor 间通讯
快速入门应用中, 我们只是在外部给一个 Actor 发送信息.
在 Actor 应用中, 最有意义的是两个 Actor 间的通讯.
需求: 编写两个 Actor, 实现两个 Actor 间的通讯
FansActor.scala
package com.atguigu.akka.communication
import akka.actor.{Actor, ActorRef}
class FansActor(zhiling : ActorRef) extends Actor{
override def receive: Receive = {
case "start" => {
println("粉丝开始发送信息....")
zhiling ! "志玲你好"
}
case "粉丝你也好!" =>{
println("粉丝收到的信息: 粉丝你也好!")
zhiling ! "志玲你单身吗?"
}
case "小妹曾经单身!" =>{
println("粉丝收到的信息: 小妹曾经单身!")
zhiling ! "志玲, 晚上能不能深入交流一下(¯﹃¯)"
}
case _ =>{
println("粉丝收到的信息: 未知信息")
}
}
}
ZhilingActor.scala
package com.atguigu.akka.communication
import akka.actor.Actor
class ZhilingActor extends Actor{
override def receive: Receive = {
case "志玲你好" => {
println("志玲收到信息: 志玲你好")
sender() ! "粉丝你也好!" // 给发送信息的人返回信息
}
case "志玲你单身吗?" =>{
println("志玲收到的信息: 志玲你单身吗")
sender() ! "小妹曾经单身!"
}
case _ =>{
println("志玲收到的信息: 未知信息")
sender() ! "你好坏, 不知道你在说啥呀!"
}
}
}
App.scala
程序的入口
package com.atguigu.akka.communication
import akka.actor.{ActorRef, ActorSystem, Props}
object App {
def main(args: Array[String]): Unit = {
val communicationApp = ActorSystem("communicationApp")
val zhiling: ActorRef = communicationApp.actorOf(Props[ZhilingActor], "zhiling")
// 创建粉丝FansActor, 需要传递 ZhilingActor 的引用过去
val fans: ActorRef = communicationApp.actorOf(Props(classOf[FansActor], zhiling), "fans")
// 粉丝先发信息, 通话开始
fans ! "start"
}
}