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"

    }
}
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-07-02 08:12:45

results matching ""

    No results matching ""