16.3.3 Actor 的 HelloWorld

步骤1: 添加 Akka 依赖

<dependency>
    <groupId>com.typesafe.akka</groupId>
    <artifactId>akka-actor_2.11</artifactId>
    <version>2.5.19</version>
</dependency>
<dependency>
    <groupId>com.typesafe.akka</groupId>
    <artifactId>akka-remote_2.11</artifactId>
    <version>2.5.19</version>
</dependency>

步骤2: 创建文件HelloAkka.scala

package com.atguigu.akka

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

class HelloAkka extends Actor {
    override def receive: Receive = {
        {
            case "Hello" => {
                println("收到 Hello 消息")
            }
            case "ok" => {
                println("收到 ok 消息")
            }
            case _ => println("收到未知消息")
        }
    }
}

object HelloAkka{
    private val actorFactory: ActorSystem = ActorSystem("actorFactory")
    private val helloAkkaRef: ActorRef = actorFactory.actorOf(Props[HelloAkka], "helloAkka")
    def main(args: Array[String]): Unit = {
        helloAkkaRef ! "Hello"
        helloAkkaRef ! "ok"
        helloAkkaRef ! "hehe"
    }
}

说明:

  • private val actorFactory: ActorSystem = ActorSystem("actorFactory"): 这行代码创建一个 ActorSystem, 也是Actor的 Context, 所有的 Actor 都是 ActorSystem 的 child.

  • actorFactory.actorOf(Props[HelloAkka], "helloAkka") 创建一个Actor(使用反射的方式), "helloAkka" 是给创建的 Actor 的命名. 并返回创建的 ActorActorRef

  • helloAkkaRef ! "Hello": 使用 helloAkkaRef 来发送信息. 把"Hello"发送到helloAkkaRefMailBox

  • 会在底层创建 Dispather Message ,是一个线程池,用于分发消息, 消息是发送到对应的 Actor 的 MailBox

  • 会在底层创建 HelloActorMailBox 对象,该对象是一个队列,可接收 Dispatcher Message 发送的消息

  • MailBox 实现了 Runnable 接口, 是一个线程, 一直运行并调用 Actorreceive 方法, 因此当 Dispather 发送消息到 MailBox 时,在Actorreceive 方法就可以得到信息.

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-04-12 09:01:17

results matching ""

    No results matching ""